如何遍历具有struct指针的向量?

时间:2015-05-06 15:15:33

标签: c++ pointers vector struct iteration

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;
}

这显然不是迭代结构指针向量的正确方法,因为我的编译器给了我错误。我该如何解决?另外,当我将指针存储在向量中时,有什么我应该担心的吗?

3 个答案:

答案 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;
}