zoukankan      html  css  js  c++  java
  • 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 << "	";
    }
    

      

  • 相关阅读:
    决策树
    Caffe:深入分析(怎么训练)
    Caffe深度学习计算框架
    Caffe参数交换源码分析
    Net的网络层的构建(源码分析)
    FineTuning机制的分析
    Caffe::Snapshot的运行过程
    AdaBoost算法
    SVM支持向量机
    SMO序列最小最优化算法
  • 原文地址:https://www.cnblogs.com/hcklqy/p/14629816.html
Copyright © 2011-2022 走看看