c++ vector容器使用迭代器的一个bug 记录

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值