C ++ std :: vector :: const_iterator问题

时间:2013-06-12 22:53:06

标签: c++ stl iterator const-iterator

所以我对C ++比较陌生,我遇到了以下std :: vector :: const_iterator的问题:

for (vector<shared_ptr<FSNode>>::const_iterator itr = curNode->GetSubNodes().begin() ; itr != curNode->GetSubNodes().end(); itr++)
{
    shared_ptr<FSNode> nextNode = *itr;
    GetXMLFromNode(nextNode, xmlDom, dirEle);
}

GetSubNodes访问者

const std::vector<shared_ptr<FSNode>> FSNode::GetSubNodes()
{
    return subNodes_;
}

基本上得到运行时错误,其中itr应该是常规迭代器。有人知道我哪里错了吗?可能是一个非常简单的问题,但我现在没有看到它。

1 个答案:

答案 0 :(得分:4)

GetSubNodes按值返回向量。因此,每次调用它时,都会得到不同的向量副本。当副本被销毁时,您从此副本获取的迭代器无效,这在语句结束时发生。而是通过引用返回向量。

const std::vector<shared_ptr<FSNode>> & FSNode::GetSubNodes()
///////////////////////////////////// ^
{
    return subNodes_;
}