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";
}

浙公网安备 33010602011771号