使用迭代器访问结构元素

Accessing structure elements using iterator

本文关键字:结构 元素 访问 迭代器      更新时间:2023-10-16

我已经定义了这个结构和向量:

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,其中包含测试名称,但为什么我不能访问像cout << it1 -> id;这样的结构元素?如何访问该结构的元素?

您可以通过以下方式

cout << ( *it ) -> id;

表达式*it给出向量中的元素,该元素是指针。

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

(*it1)->id;

解释:

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

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