c/c++语言开发共享c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作

c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作 关键概念:向容器添加元素时,添加的是元素的拷贝,而不是对象本身。随后对容器中元素的任何改变都不会影响到原始对象,反之亦然。 关键警告:因为vector,deque,string的内存存储都是在 …


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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607960.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐