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

      

  • 相关阅读:
    Docker容器管理神器
    查看MySQL连接状态
    使用 Docker 镜像安装 Radicale3
    Java文档注释的使用
    Hibernate依赖问题
    WPF HelixToolkit 3D
    二分法
    比较 React vue, 单向绑定 双向绑定 优缺点
    7 个杀手级的 JS 一行代码
    js中??和?.的意思
  • 原文地址:https://www.cnblogs.com/hcklqy/p/14629816.html
Copyright © 2020-2023  润新知