C++ 顺序容器总结

标准库定义了3中顺序容器:vector、list、deque

一、顺序容器的定义

#include <vector>

#include <list>

#include <deque>

vector<int> ivec;

list<int> ilist;

1、顺序容器的初始化

C<Type> c;-----创建一个空容器---------------------------------------------------------------------------适用于所有容器;

C c(c2);----------创建c2的副本,c2和c必须是相同的容器类型并且有相同类型的元素------------适用于所有容器;

C c(beg,end);---利用两个迭代器创建容器c--------------------------------------------------------------使用于所有容器;

C c(n,t);----------创建容器里面含有n个t,t必须是容器C的类型/可转换成C类型-------------------仅适用于顺序容器;

C c(n);------------创建有n个值初始化元素的容器c------------------------------------------------------仅适用于顺序容器;

2、容器内元素的特殊要求

元素类型必须支持赋值运算;

元素类型的的对象必须可以复制;

IO类型的对象不支持复制,所以不能存储在容器中。

3、容器的容器

vector< vector<string> > lines;

二、迭代器

1、仅vector和deque容器的迭代器支持的运算

iter+n

iter-n

iter+=iter2

iter-=iter2

iter1-iter2

>,>=,<,<=

2、迭代器的范围

[first,last)  左闭右开,表示从first开始到last结束,但是不包括last。last绝对不能位于first之前。

(1)当fisrt=last时容器为空;

(2)当first!=last时容器至少有一个元素;

三、顺序容器的操作

1、添加元素

push_back(t);//适用于所有顺序容器

push_front(t);//仅适用于list和deque

insert(p,t);//在迭代器p前面插入一个元素,返回新添加元素的迭代器

insert(p,n,t)//在迭代器p前面插入n个t元素,返回void

insert(p,b,e)//在迭代器p前面插入迭代器b和e之间的元素

注意:添加元素可能使容器的迭代器部分或者全部失效,所以避免存储end操作返回的迭代器。

2、容器大小的操作

C.size();//返回容器内元素的个数

C.max_size(0;//返回容器可容纳的最大元素个数

C.empty();

C.resize(n);//调整容器的长度,使其能容纳n个元素,如果n<C.size(),删除过多的,else 添加采用值初始化的新元素

C.resize(n,t);//调整容器的长度,使其能容纳n个元素,新添加的元素初始化为t

3、访问容器的元素

C.back();

C.front();

C[n];//仅适用于vector和deque容器

C.at(n);//仅适用于vector和deque容器

4、删除容器中的元素

C.pop_back();返回void

C.pop_front();//仅适用于vector和deque容器,返回void

C.erase(p);//删除p所指的元素,返回下一个位置

C.erase(b,e);//删除迭代器b和e之间的元素,返回下一个位置

C.clear();//删除所有元素,返回void

5、赋值与swap

C1 = C2   等价于:C1.clear();C1.insert(C1.end(),C2.begin(),C2.end());

C1.swap(C2);//交换两个容器内的元素,容器类型和元素类型都必须相同,没有改变容器内元素的个数迭代器不会失效。但是原先指向C1的迭代器现在指向C2的元素,可以节省删除元素的成本。

C.assign(b,e);//删除原来的元素,将b和e之间的元素复制到C,删除原来的元素。可以不是同一容器类型的迭代器但是所指的元素类型必须相同或者相互兼容。

C.assign(n,t);//将容器重置为存储n个t元素

四、vector容器的自增长

为了支持随机访问,vector的元素以连续方式存放。当vector容器内存满元素后,再添加元素的话,需要重新分配几个更好的vector容器,然后在吧旧的容器内的元素复制到新的容器,再删除旧的容器,这样容器的性能会很差。

幸运的是标准库为vector容器实现了一个自增长策略。

实际分配的容器空间要比现在所需要的多一些。这样不至于每次添加元素的时候重新分配空间。当容器的capacity满之后,再重新分配2*capacity的容量。这样的自增长策略提高了vector的效率。

capacity——容器的容量;

size——容器内当前元素的个数;

这两个不同

五、容器的选用

1、插入操作的影响

list容器表示不连续的内存区域,再任何位置都可以高效地插入(删除)一个元素

2、随机访问的影响

vector和deque都可以支持元素高效的随机访问。除非特殊需要,vector是最佳的选择

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值