我已经定义了这个结构和载体:
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;
那样访问结构的元素?如何访问该结构的元素?
答案 0 :(得分:2)
您可以通过以下方式执行此操作
\-
表达式cout << ( *it ) -> id;
给出向量中作为指针的元素。
答案 1 :(得分:2)
您必须再次取消引用迭代器,才能访问数据结构的字段:
*it
<强>解释强>
从概念上讲,迭代器只不过是指向容器中元素的指针(事实上,(*it1)->id;
的大多数实现都是指向std::vector<T>::iterator
的指针)。在您的情况下,容器元素本身是指针,因此您必须取消引用迭代器两次:第一个(T
)为您提供对存储在容器中的指针的引用,然后由{{{{{{ 1}}运算符,用于访问实际的对象字段。
你写的方式你试图访问迭代器的成员(如果它被实现为原始指针则没有任何成员)