gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:37:47 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com