zoukankan      html  css  js  c++  java
  • c/c++ 标准容器 forward_list resize 操作

    c/c++ 标准容器 forward_list, resize, 重新定位迭代器

    1,forward_list特有的方法:

    • insert_after
    • emplace_after
    • erase_after

    2,容器的插入删除操作后的注意事项

    • 必须保证每次改变容器的操作后都正确地重新定位迭代器。
    • 如果在循环中插入/删除deque,vector,string中的元素,不要缓存end返回的迭代器。

    知识点

    1,forward_list容器的使用,对应代码里的test1

    2,resize的使用,对应代码里的test2

    3,容器的插入删除操作后的注意事项,对应代码里的test3

    #include <iostream>
    #include <vector>
    #include <string>
    #include <list>
    #include <forward_list>
    #include <deque>
    
    using namespace std;
    
    int main(){
      //test1 forward_list容器的使用                                                
      //insert_after,emplace_after,erase_after                                      
      /*                                                                            
      forward_list<int> fl{0,1,2,3,4,5};                                            
      //返回头迭代器                                                                
      auto head = fl.before_begin();                                                
      //在head的后面插入6,并返回指向6的迭代器,第一个元素是6                        
      auto it = fl.insert_after(head, 6);                                           
      cout << *it << endl;                                                          
      for(auto s : fl){                                                             
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      auto it1 = fl.erase_after(it);                                                
      cout << *it1 << endl;                                                         
      for(auto s : fl){                                                             
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      fl.pop_front();                                                               
      for(auto s : fl){                                                             
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      */
    
      //test2 resize                                                                
      //如果当前容器的大小大于所要求的大小,容器后部的元素会被删除;                
      //如果当前容器的大小小于所要去的大小,会讲新元素添加到容器的后部    
      /*          
      list<int> li(5,11);
      cout << li.size() << endl;
      for(auto s : li){
        cout << s << " ";
      }
      cout << endl;
      li.resize(7,2);
      cout << li.size() << endl;
      for(auto s : li){
        cout << s << " ";
      }
      cout << endl;
      li.resize(3,8);//因为3小于原来容器的大小7,所以第二个参数8就被忽略了          
      cout << li.size() << endl;
      for(auto s : li){
        cout << s << " ";
      }
      cout << endl;
      */
    
      //test3 容器的插入删除操作可能使迭代器失效                                    
      vector<int> vi = {0,1,2,3,4,5,6,7,8,9};
      auto it = vi.begin();
      //这里每次都会重新去取得尾迭代器,不会有问题,                                
      //如果提前把end保存了的话,改变vi后,end就失效了,会死循环等                  
      while(it != vi.end()){
        //奇数的时候                                                                
        if(*it % 2){
          it = vi.insert(it, *it);
          //重新设定迭代器,让it指向下一个奇数                                      
          it += 2;
        }
        //偶数的时候                                                                
        else{
          it = vi.erase(it);
        }
      }
      for(auto s : vi){
        cout << s << " ";
      }
      cout << endl;
    }
    

    c/c++ 学习互助QQ群:877684253

    本人微信:xiaoshitou5854

  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9644009.html
Copyright © 2011-2022 走看看