[英]How do I iterate through a vector that has struct pointers?
struct some_struct{
some_struct *pointer_to_another_struct;
int a;
some_struct(int value ) :a (value), pointer_to_another(NULL)()
};
...
vector<some_struct *> tree;
...
for ( auto it = tree.begin(); it != tree.end(); ++it) {
it->a=10;
}
显然,这不是迭代结构指针向量的正确方法,因为我的编译器给了我错误。 我该如何解决? 另外,当我将指针存储在向量中时,我有什么需要担心的吗?
只需先取消引用迭代器:
(*it)->a=10;
在您的代码中,您尝试访问vector<some_struct *>::iterator
元素a
,这没有任何意义。 您想取消引用迭代器以访问结构指针:
some_struct * ptr = *it;
另外,由于您具有C ++ 11,因此仅将范围用于循环可能更有意义:
for (auto ptr : tree)
{
...
}
等效于:
for (some_struct * ptr : tree)
{
...
}
如果可以使用C ++ 11,则可以改用基于范围的for循环
for (auto element : tree)
{
element->a=10; // element is a some_struct*
}
否则,按照书面规定,您需要首先取消引用迭代器以获取基础指针。
dwcanillas回答当然是正确的,但是如果c ++ 11可用,另一种替代方法是使用for-each:
for(some_struct* ptr : tree) {
ptr->a = 10;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.