如何将基于迭代器的循环重写为基于范围的循环(C ++ 11)

时间:2012-10-08 14:46:08

标签: c++ loops for-loop c++11 iterator

我想重写这个for循环(有效)

for (vector<shared_ptr<Node<int>>>::iterator it = n.root.children.begin();
    it != n.root.children.end(); 
    ++it) 
    {cout << (*it)->value<<flush;}

进入基于范围的for循环。我试过的是

for (shared_ptr<Node<int>> child:(n.root).children){
       cout<<(child->value)<<" "<<flush;
    }

但它给了我一个核心转储。根是Node

类型
template <typename T>
class Node{
public:
    T value;
    vector<shared_ptr<Node>> children;
};

main.cpp中的这些行工作正常。

cout<<(n.root).value<<flush;
cout<<n.root.children.front()->value<<flush;

我使用g ++ 4.7.2。

1 个答案:

答案 0 :(得分:2)

你好。试试这个。

for (auto v : n.root.children ) {
    cout << v->value << flush;
}