我有一个包含 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 谢谢。 编辑:这是我的头文件:#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 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 for(vector<random>::iterator it = foo.getVector().begin();当您执行foo.getVector()时,将返回临时 vector ,并且在;之后遇到foo.getVector().begin();时,该临时 vector 将被销毁,因此迭代器在循环内变得无效。如果将foo.getVector();的值存储在 vector v(v = foo.getVector();)中,然后使用 vector v,则可以正常工作。这是因为 vector v在整个循环中都是有效的。 (adsbygoogle = window.adsbygoogle || []).push({});
09-08 08:40