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

标签 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 应该是一个常规迭代器。有人知道我哪里出错了吗?可能是一个非常简单的问题,但我现在没有看到。

最佳答案

GetSubNodes 按值返回 vector 。所以你每次调用它时都会得到一个不同的 vector 拷贝。当拷贝被销毁时,您从此拷贝获得的迭代器无效,这发生在语句末尾。而是通过引用返回 vector 。

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

关于C++ std::vector::const_iterator 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076724/

相关文章:

java - 如何在迭代时从 "ConcurrentModificationException"中删除元素时避免 `ArrayList` ?

c++ - 如果函数抛出的异常可能未被捕获,如何销毁局部变量?

c++ - 64 位构建中 STL/OpenMP 的奇怪并发问题

c++ - decltype 是如何工作的?

c++ - 不能将 std::iota 与 std::set 一起使用

c++ - 是否应该更喜欢 STL 算法而不是手动循环?

java - LRU缓存: linkedhashmap and iterator implementation not working

java - 如何循环遍历 List<Pair>> 迭代器

c# - 将 DataTable 传递到非托管环境(Visual C# 2005)

C++ 在配置之间切换的最佳方式