顺序容器(c primer)

    技术2025-10-15  4

    (基于c primer,本文主要为便于快速回忆相关知识(常用的),如侵权,请联系本人进行处理。)

    总述:

     ->所有容器类共享公共的接口,不同容器基于性能和功能的权衡,对其进行扩展。

     ->所有顺序容器都提供了快速访问元素的能力。

     ->性能折中的方面:1.向容器中添加/删除元素的代价。2.非顺序访问容器中元素的代价。

     ->类型:

            1.vector 。可变大小数组。&支持快速随机访问&。**尾部之外的插入/删除元素可能很慢**。

            2.deque。双端队列。&支持快速随机访问&。**头/尾速度快**。

            3.list。双向链表。&只支持双向顺序访问&。**任何位置插入/删除速度快**。

            4.forward_list。单向链表。&只支持单向顺序访问&。**同list**。

            5.array。固定大小数组。&同vector&。**不能添加/删除元素**。

            6.string。与vector相似。但专门用于保存字符。&随机访问快&。**在尾部插入/删除速度

            快**。

    ->操作:

       ->共有(接口同):类型别名、构造函数(个别不适用array)、赋值与swap(个别不适用array)、

              大小(个别不支持 forward_list)、获取迭代器、反向容器的额外成员(全不适用forward_list)。

       ->非公有(接口不同,操作名一样):添加/删除元素(全不适用于array)  。  

    初始化

       ->定义和初始化:

          C c;   C c1(c2); C c1=c2; C c{a,b,c...}//列表初始化 ;C c={a,b,c...}; C c(b,e)//指定范围,array不适用;

          C seq(n)//explicit,string不适用; C seq(n,a)//array不适用;C seq(n,t);          

        【其中大部分初始化,若是array,有特殊要求】

    赋值和swap(赋值相关操作会使指向左边容器内部的迭代器、引用、指针失效。

                        swap操作不会失效[除了array和string]。)

       ->可用于所有容器:

          ->c1=c2;c={a,b,c...}//不适用array;swap(c1,c2)//通常比拷贝快;c1.swap(c2);

          ->assign操作不适用关联容器和array。(一个对象被允许从一个不同但相容的类型赋值)

             seq.assign(b,e) //将seq中元素换为迭代器b,e所表示的范围中的元素。b,e不能指向seq中

            的元素。

             seq.assign(il)//将seq中元素替换为初始化列表il中的元素。

             seq.assign(n,t)//将seq中元素更换为n个值为t的元素。

    操作:

        ->添加(非array:内置函数)                        :insert一般返回值,指向新插入的元素

           push_back(t);emplace_back(args);尾添加  push_front(t);emplace_front(args);头添加

           insert(p,t);emplace(p,args);p指向的元素的之前添加 insert(p,n,t);在p指向的元素之前添加n个t

           insert(p,b,e);在p指向的元素之前的位置,添加p到e范围的元素进去,p,e迭代器指向的不能是p

           所在的容器中。

           ->forward有自己的insert和emplace,且不支持push_back和emplace_back。

               vector和string不支持push_front和emplace_front。

        ->删除                                        :erase一般返回值,指向最后一个被删除元素之后的元素

          pop_back();pop_front();erase(p);erase(b,e);clear();

          ->forward_list有特殊版本erase。不支持pop_back。

             vector和string不支持pop_front()。

        ->改变容器大小(不适用array)

            resize(n);resize(n,t)//调整大小为n,新添加的元素初始化为t;

    Processed: 0.010, SQL: 9