• 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;
        }
  • 相关阅读:
    Oracle连接数一直在增
    ora00020: maximum number of processes (150) exeeded
    oracle归档日志满了
    C# ZPL
    error CS0227: 不安全代码只会在使用 /unsafe 编译的情况下出现
    最全zpl语言指令解析(含乱码)
    ZPL 打印机实例
    ora-01400 无法将NULL插入 ID 解决方法
    windows 选择时间控件(选择日期, 小时分钟秒)
    用户登陆检验----没有优化,大神可以帮忙优化优化
  • 原文地址:https://www.cnblogs.com/maycpou/p/14693114.html
Copyright © 2020-2023  润新知