顺序容器(c primer)

(基于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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值