C++中的顺序容器

容器定义和初始化

    

与顺序容器大小相关的构造函数

    

  注意:只有顺序容器的构造函数才接受大小参数,关联容器并不支持。

标准库array具有固定大小

  

  因为大小是array类型的一部分,array不支持普通的容器构造函数。

六种初始化vector对象的方法

   vector<int> ilist1;

   vector<int> ilist2(ilist);  //     vector<int> ilist2_1 = ilist;

  vector<int> ilist = {1,2,3.0,4,5,6,7}; // 包含3.0的类型转换

  vector<int> ilist3(ilist.begin()+2,ilist.end()-1);

  vector<int> ilist4(7);

  vector<int> ilist5(7,3);  //7个值为3的int

赋值和swap

  

使用assign(仅顺序容器)

  顺序容器定义了一个名为assign的成员,允许我们从一个不同但相容的类型赋值,或者从容易的一个子序列赋值,assign操作用参数所指定的元素(的拷贝)替换左边容器的所有元素。

使用array

 除array之外,swap不对任何元素进行考诶、删除或者插入操作,因此可以保证在常数时间内完成。交换来听歌容器内容的操作保证会很快,

  元素本身并没有交换,swap只是交换了两个容器内部数据结构。而交换两个array所需时间与array中元素的数目成正比。

  另:统一使用非成员版本的swap是一个好习惯,因为其在泛型编程中时很重要的。

容器大小操作

  

顺序容器操作

  

  使用push_back

    除array和forward_list之外,顺序容器支持push_back将元素压入容器尾部。

  关键概念:容器元素是拷贝。

  使用push_front

    list、forward_list和deque容器还支持名为push_front的操作,将元素插入到容器的头部。

  在容器特定位置添加元素

    slist.insert(iter,"hello!"); //hello插入到了iter指向的元素之前。

  插入范围内元素

    

  使用isert的返回值

    

  使用emplace操作

    

  注意:

      

   访问元素

     

    

  删除元素

    

  特殊的forward_list操作

    

  改变容器大小

    

    

  容器操作可能使迭代器失效

    

  防止迭代器失效的操作:

      为了防止添加和删除vector、string、或deque元素循环程序必须考虑迭代器、引用和指针可能失效的问题。程序必须保证每个循环步骤中都更新迭代器、引用或指针。

       不要保存end返回的迭代器。 因为end返回的迭代器总是会失效。

vector对象是如何增长的

      【采用多分配一点空间作为备用】

      管理容量的成员函数

        

  capcity和size  

    容器的size是指它已经保存的元素的数目,而capacity则是在不分配新的内存空间的前提下它最多可以保存多少元素。

    也就是说,capacity是包含备用空间的大小,size只是当前保存的元素的数量。

      

     为什么list或array没有capacity成员函数

      因为list新节点是从空间中分配新的内存,而删除节点是直接将节点占用的内存释放,所以不存在保留空间这个说法,至于array,数组内存是一次性分配,大小不变,不会变化。

  额外的string操作

    

    substr操作

         

    改变string的其它方法

            

    

    

   改变string的多种重载函数

    

  string搜索操作

     

    

  指定在哪里开始搜索

    

   逆向搜索

     

  compare函数

    

数值转换

    

容器适配器

    

栈适配器

    

队列适配器

      

      

原文地址:https://www.cnblogs.com/xingzhuan/p/10672290.html