使用迭代器访问结构元素
Accessing structure elements using iterator
我已经定义了这个结构和向量:
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
)为您提供对存储在容器中的指针的引用,然后由->
运算符取消对该指针的引用以访问实际的对象字段。
您编写它的方式是,尝试访问迭代器的成员(如果它被实现为原始指针,则没有任何成员)
相关文章:
- 使用不带参数的函数访问结构元素
- 访问类lintalizer列表中的结构元素
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 结构元素名称要 cout?
- C++结构元素(成员变量)的数量
- 如何在类中声明静态 const 结构元素
- 在地图中搜索结构元素
- 在C++中传递结构数组 - 被调用函数中不存在结构元素,如何正确传递向量?
- 结构元素C 的枚举
- 将结构元素地址设置为C 中的null(单链接列表)
- OPENCV:为击中创建一个正方形结构元素
- 如何将结构元素传递给异步线程
- C - 基于另一个元素对结构元素进行排序
- 无法从传递到 pthread 的结构中访问结构元素
- 矢量的打印结构元素
- C结构元素对齐(ansi)
- 用3x3结构元素进行两次形态扩张,等于用6x6结构元素进行一次形态扩张
- 创建结构元素的动态数组,然后创建该结构的动态数组.C++
- 访问地图数据结构中的结构元素
- 尝试在文本文件中添加结构元素而不覆盖它