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;
}
这显然不是迭代结构指针向量的正确方法,因为我的编译器给了我错误。我该如何解决?另外,当我将指针存储在向量中时,有什么我应该担心的吗?
答案 0 :(得分:6)
首先取消引用迭代器:
(*it)->a=10;
在您的代码中,您尝试访问a
的元素vector<some_struct *>::iterator
,这是没有意义的。您希望取消引用迭代器来访问struct指针:
some_struct * ptr = *it;
或者,既然你有C ++ 11,那么只使用一个范围for循环可能更有意义:
for (auto ptr : tree)
{
...
}
相当于:
for (some_struct * ptr : tree)
{
...
}
答案 1 :(得分:2)
如果你可以使用C ++ 11,你可以使用基于范围的for循环
for (auto element : tree)
{
element->a=10; // element is a some_struct*
}
否则,如上所述,您需要首先取消引用迭代器以获取基础指针。
答案 2 :(得分:2)
dwcanillas answere当然是正确的,但如果c ++ 11可用,另一种替代方法是使用for-each:
for(some_struct* ptr : tree) {
ptr->a = 10;
}