zoukankan      html  css  js  c++  java
  • C++ 插入迭代器insert iterator

    1.C++中的迭代器一般是不会改变容器的大小的,只是用于读取或者修改容器中元素的值。而插入迭代器可以用于向容器中添加元素。

    2.

     std::vector<int> vec;
        auto it = std::back_inserter(vec);//back_inserter用于创建一个vec容器的插入迭代器
        *it = 42;//给创建的插入迭代器赋值相当于调用push_back向容器中添加元素
        for(int i = 0;i<vec.size();i++){
            cout << vec[0] << endl;
        }
     
    3.插入迭代器和fill_n算法结合使用
    fill_n(dest,n,val)。fill_n算法用于向容器中dest位置开始添加n个val元素。
    如果dest为一个容器的起始位置,而容器的长度小于n,那么代码的迭代器会越界导致报错,如:std::vector<int> vec;std::fill_n(vec.begin(),10,0);
    fill_n的算法内部起始是给dest开始的迭代器和后面n-1个迭代器指向的值赋值为val。
    这里如果把dest替换为插入迭代器,那么相当于每次都调用vec的push_back方法插入值val,所以就不会产生越界报错的问题:std::vector<int> vec;std::fill_n(std::back_inserter(vec),10,0);
     
    4.插入迭代器和replace_copy结合使用
    replace迭代器用于将容器中指定值替换为另外一个值,它是在原容器中操作,如果我们希望原容器中的值不变,执行替换后生成一个新的容器,这个新容器中执行了替换操作,那么就要使用replace_copy算法:
     std::vector<int> vec{0,2,2,2,3,4,5,6,7};
        std::vector<int> vec1;
        std::replace_copy(vec.begin(),vec.end(),std::back_inserter(vec1),2,9);
        for(auto item:vec1){
            cout<<item<<endl;
        }
  • 相关阅读:
    poj1862---变形虫(贪心)
    poj1833---字典序算法
    poj1799---解析几何
    poj1665
    poj1663---纯粹找规律
    poj1658
    poj1657---chessboard
    poj1656---数黑格子
    poj1617---columnar encryption
    查找两个文件的相同之处,不同之处
  • 原文地址:https://www.cnblogs.com/maycpou/p/14693114.html
Copyright © 2011-2022 走看看