C++: vector "corrupting"的第一个元素

标签 c++ stl vector iterator cout

我有一个包含 vector 的类 (foo)。

如果我尝试像这样遍历 vector 中的元素:

for(vector<random>::iterator it = foo.getVector().begin();
        it != foo.getVector().end(); ++it) {
  cout << (*it) << endl;

}

第一个元素总是损坏并返回垃圾数据。

但是,如果做类似的事情:

 vector<random> v = foo.getVector();
 for(vector<random>::iterator it = v.begin();
            it != v.end(); ++it) {
      cout << (*it) << endl;

 }

一切似乎都运行良好。是否有我不知道的“陷阱”?

我也试过 cout << foo.getVector()[0] << endl;在循环之外,但这似乎工作正常。

谢谢。

编辑:

这是我的头文件:

#ifndef HITS
#define HITS

#include <vector>
#include "wrappers.h"

class Hits {

    public:
        Hits();
        std::vector<word_idx_value> getVector() {return speech_hits;}
        const std::vector<word_idx_value> getVector() const {return speech_hits;}
        void add(const word_idx_value&);
        Hits &operator+=(const Hits&);
    private:
        std::vector<word_idx_value> speech_hits;
};

#endif

最佳答案

for(vector<random>::iterator it = foo.getVector().begin();

当您执行 foo.getVector() 时返回临时 vector ,在 foo.getVector().begin 之后遇到 ; 时它被销毁(); 因此迭代器在循环内变得无效。

如果将 foo.getVector(); 的值存储在 vector v ( v = foo.getVector();) 中,然后使用 vector v,它工作良好。这是因为 vector v在整个循环中都是有效的。

关于C++: vector "corrupting"的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/856200/

相关文章:

c++ - C++中 vector 的初始容量

c++ - 用返回空 vector 的对象填充 vector

c++ - 如何在C++中初始化成员的构造函数参数

c++ - 放置和默认构造函数

c++ - 从文件中读取并在 C++ 中交换某些字符

c++ - 找出整数序列的数字总和

flash - 如何使用值数组初始化向量?

c++ - 为分布式系统通信设置套接字

C++ 错误 C2065 : undeclared identifier

c++ - 如果复制容器,在哪些情况下调用复制构造函数