使用迭代器访问结构元素

时间:2016-03-29 22:49:34

标签: c++ pointers vector iterator operators

我已经定义了这个结构和载体:

struct All
{
    string name;
    int id;
};
vector<All*> all;

我使用lower_bound函数将创建的数据结构插入向量,以保持排序。

All * tmp = new All(name, id);
auto it = lower_bound(all.begin(), all.end(), name, compare2());
all.insert(it, tmp);

当我想找到name = test的结构时,我这样做:

auto it1 = lower_bound(all.begin(), all.end(), name, compare2());

它为我的迭代器it提供了名称中包含test的结构,但为什么我不能像cout << it1 -> id;那样访问结构的元素?如何访问该结构的元素?

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式执行此操作

\-

表达式cout << ( *it ) -> id; 给出向量中作为指针的元素。

答案 1 :(得分:2)

您必须再次取消引用迭代器,才能访问数据结构的字段:

*it

<强>解释

从概念上讲,迭代器只不过是指向容器中元素的指针(事实上,(*it1)->id; 的大多数实现都是指向std::vector<T>::iterator的指针)。在您的情况下,容器元素本身是指针,因此您必须取消引用迭代器两次:第一个(T)为您提供对存储在容器中的指针的引用,然后由{{{{{{ 1}}运算符,用于访问实际的对象字段。

你写的方式你试图访问迭代器的成员(如果它被实现为原始指针则没有任何成员)