容器内含结构体的遍历方式
以vector为例
1.可以用整型量进行寻址
这种直接采用for循环即可。
struct point
{
int x=0;
int y=0;
};
vector<point> v1;
point p1;
point p2;
v1.push_back(p1);
v1.push_back(p2);
for(int i=0;i<vector.size();i++)
{
cout<<v1[i].x;
}
可以很直接的通过先取出结构体再直接对他们进行操作,但是有时候这样间接寻址跟算法不匹配,或者某些容器(如set等)不支持这种方式的时候,此时更加推荐迭代器遍历的方法。
2.迭代器寻址
迭代器指针每次指向一个容器内元素,如果他是一个值,那么可以直接用解引用的方式获取,如果是一个自定义类或结构体,就必须采用箭头来取特定的类内成员属性或者结构体属性。
struct point
{
int x=0;
int y=0;
};
vector<point> v1;
point p1;
point p2;
v1.push_back(p1);
v1.push_back(p2);
vector<point>::iterator it=v1.begin();
for (it ;it!=v1.end();it++)
{
cout<<it->x;//这样可以
~~cout<<*it.x~~ ;//这样错误
}
原因就是解引用返回的是值而不是一个结构体,所以必须用箭头运算符来获取成员属性。
有帮助请点个赞支持下,谢谢