需要访问指向结构的指针+指针类型的向量中的interator所指向的元素

Accessing elements pointed to by interator in vector of pointers to structures + pointer type is required

本文关键字:指针 interator 元素 向量 类型 结构 访问      更新时间:2023-10-16

我是C++的新手,在访问向量元素时遇到了一点问题。它是指向a类中myStruct的指针向量:

struct myStruct{
 int val; 
 string name;
}myStruct;
Class A{
 ...
 vector<myStruct*> vec;
 B create()const;
} 
Class B{
 ...
 string Name(); //return name of current struct
 vector<myStruct*>::iterator beginning;
 int offset; //offset from the beginning
} 

类A有一个方法create()const,其中创建了类B的对象。它应该像某种迭代器一样工作,遍历具有某些属性的vec的一部分。方法Name()应该在vec[offset] 的位置上从myStruct返回name

A.create()中,我创建了Class B的新对象,用lower_bound()选择vec迭代部分的开头,并将其放在new_object.beginning中。

当我想实现B.Name()时,我只能通过移动迭代器beginning并取消引用它来访问vec中结构的元素。什么是正确的命令形式,可以实现我想要的功能-正确取消引用迭代器beginning

IDE中的完成使我找到了类似*( *(beginning + offset))->name的东西,但随后它显示了一个错误Pointer type is required

命令的正确形式是什么,它可以做我想要的事情——正确地取消引用迭代器的开头?

beginning的类型为vector<myStruct*>::iterator
beginning + offset的类型也是vector<myStruct*>::iterator
*(beginning + offset)的类型是myStruct*

要访问myStruct元素的名称成员,需要使用(*(beginning + offset))->name

通过使用临时的,可以使代码更容易理解。

myStruct* elementPtr = *(beginning + offset);
elementPtr->name;