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

  

posted @ 2021-04-07 21:52  水中游鱼  阅读(163)  评论(0编辑  收藏  举报