1. 问题描述
有一个函数可以返回一个vector
,形如:
std::vector<classA> classB::getVector();
想直接使用迭代器对函数返回值进行遍历,即打算使用以下结构进行遍历:
std::vector<classA>::iterator iter = b.getVector().begin();
while(iter != b.getVector().end()) {
cout << (*iter) << endl;
++iter;
}
发现计算结果与预期天差地别,debug时发现每输出一次(*iter)
的内容,其指向的内容就会发生变化,而且++iter
和(iter+1)的结果都错误。
2. 问题解决
最后发现函数返回的vector
的迭代器无法正常工作,必须对vector
本体使用迭代器遍历才行,如果要实现上述功能需要拷贝出返回值到一个中间变量,再对中间变量进行遍历,形似下面的代码:
std::vector<classA> temp_vector = b.getVector();
std::vector<classA>::iterator iter = temp_vector.begin();
while(iter != temp_vector.end()) {
cout << (*iter) << endl;
++iter;
}