zoukankan      html  css  js  c++  java
  • c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作

    c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作

    关键概念:向容器添加元素时,添加的是元素的拷贝,而不是对象本身。随后对容器中元素的任何改变都不会影响到原始对象,反之亦然。

    关键警告:因为vector,deque,string的内存存储都是在连续的空间上,所以向vector,deque,string的头尾以外的位置插入元素或者删除元素,会产生元素的移动,就会非常耗时,这时就应该考虑使用双向链表list,但是list不支持下标操作

    知识点

    1,在容器的尾部插入元素push_back,对应代码里的test1

    2,在容器的头部插入元素push_front,对应代码里的test2

    3,在容器的任意位置插入单个元素insert ,对应代码里的test3

    4,在容器的任意位置插入多个元素insert,对应代码里的test4

    5,insert返回新添加的第一个元素,对应代码里的test5

    6,emplace_front,emplace,emplace_back,对应代码里的test6

    #include <iostream>
    #include <vector>
    #include <string>
    #include <list>
    #include <forward_list>
    #include <deque>
    
    using namespace std;
    
    int main(){
      //test1 push_back                                                             
      //forward_list没有push_back方法                                               
      /*                                                                            
      vector<string> container;                                                     
      //list<string> container;                                                     
      //deque<string> container;                                                    
      //forward_list<string> container;//forward_list没有push_back方法              
      string word;                                                                  
      while(cin >> word){                                                           
        container.push_back(word);                                                  
      }                                                                             
      for(auto const &s : container){                                               
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
                                                                                    
      string s("abc");                                                              
      s.push_back('d');                                                             
      cout << s << endl;                                                            
      */
    
      //test2 push_front                                                            
      /*                                                                            
      //list<string> container;                                                     
      deque<string> container;                                                      
      string word;                                                                  
      while(cin >> word){                                                           
        container.push_front(word);                                                 
      }                                                                             
      for(auto const &s : container){                                               
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      */
    
      //test3 insert单个元素                                                        
      //vector和string虽然不支持push_front,但是支持在头部insert                    
      /*                                                                            
      //vector<string> container{"aa","bb","cc"};                                   
      //list<string> container{"aa","bb","cc"};                                     
      deque<string> container{"aa","bb","cc"};                                      
      //vector<string>::iterator it = container.begin();                            
      //list<string>::iterator it = container.begin();                              
      deque<string>::iterator it = container.begin();                               
      container.insert(++it, "ddd");                                                
      for(auto const &s : container){                                               
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      string str("abc");                                                            
      string::iterator it1 = str.begin();                                           
      str.insert(++it1, 'd');                                                       
      for(auto const &s : str){                                                     
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      */
    
      //test4 insert范围                                                            
      /*                                                                            
      vector<string> v{"aa","bb","cc"};                                             
      list<string> sl{"dd","ff"};                                                   
      sl.insert(sl.begin(), v.end() - 2, v.end());                                  
      for(auto const &s : sl){                                                      
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      sl.insert(sl.end(), {"ee","gg"});                                             
      for(auto const &s : sl){                                                      
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      */
    
      //test5 使用insert的返回值                                                   
      //插入到指定的位置之前,返回新添加的第一个元素                                 
      /*                                                                            
      list<string> sl;                                                              
      auto it = sl.begin();                                                         
      string word;                                                                  
      //下面的代码,相当于push_front                                                 
      while(cin >> word){                                                           
        it = sl.insert(it,word);                                                    
      }                                                                             
      for(auto const &s : sl){                                                      
        cout << s << " ";                                                           
      }                                                                             
      cout << endl;                                                                 
      */
    
      //test6 emplace_front,emplace,emplace_back                                    
      //直接在容器里构造对象                                                        
      class Test{
      public:
        Test(const string& d = "", int s = 2) : name(d), age(s){}
        string getName()const{
          return name;
        }
        int getAge()const{
          return age;
        }
      private:
        string name;
        int age;
      };
      list<Test> vc;
      vc.emplace_back("aa",10);
      vc.emplace_front("bb",12);
      vc.emplace(vc.begin(), "cc", 11);
      for(auto const &s : vc){
        cout << s.getName() << ":" << s.getAge() << endl;
      }
    }
    

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

    本人微信:xiaoshitou5854

  • 相关阅读:
    【转】Eclipse插件开发之基础篇(1) 插件开发的基础知识
    js获取周.html
    Go语言 基础
    MySQL replace into
    元认知:思考“何为思考”
    redis 流水线
    关于Blog现象的一些思考。
    [LCS]LCS2005服务器应用程序
    [WAP]dotNet在WAP应用开发中实现按指定页数翻页的解决方案
    [Cache]深入学习Enterprise Library for .NET Framework 2.0的Cache机制——分析篇
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9643537.html
Copyright © 2011-2022 走看看