C++Primer第五版 第九章 习题9.22
9.22 假定iv是一个int的vector,下面的程序存在什么错误?你将如何修改?
练习9.22 假定iv是一个int的vector,下面的程序存在什么错误?你将如何修改? vector<int>::iterator iter = iv.begin(), mid = iv.begin() + iv.size()/2; while(iter != mid) { if (*iter == some_val) { iv.insert(iter, 2 * some_val); } }
考察点:
vector容器不适合在头部和中间插入数据;只要使用insert 插入数据,必然导致迭代器 iter 和 mid 失效;
原题目的意思应该是判断前半部分的元素有无与某值相等的元素,如有则在其前插入一个两倍的某值。
改:
int main() { list<int> iv{ 1,2,3,4,10,6,7,10,9,10,11,12,10,14,15,16,17 }; list<int>::iterator iter = iv.begin(); typedef list<int>::size_type lst; lst mid = iv.size() / 2, some_val(10); for (lst i(0);i != mid;++i) { if (*iter == some_val) { iter = iv.insert(iter, 2 * some_val); ++iter; ++iter; } else { ++iter; } } for (auto temp : iv) cout << temp << "\t"; }