我有一个包含 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/