概述
引言
一个容器就是一些特定类型对象的集合。C++的容器可以分为两类:顺序容器和关联容器。
顺序容器主要类型有:
容器类型 | 特点 |
---|---|
vector | 相当于可变大小的数组,支持快速随机访问 |
string | 类似于vector,但专门用于保存字符 |
deque | 双端队列 |
list | 双向链表 |
forward_list | 单向链表 |
array | 固定大小数组 |
1.容器定义与初始化
(1) 所有容器都定义了默认构造函数,默认构造函数会初始化一个空的容器对象。以vector为例:
vector<int> ivector
//创建一个空的容器
(2) 此外,容器的其他构造函数,也可用于初始化容器对象。以vector为例:
vector<int> v1(v2) ; //创建容器v2的副本v1。两者必须是相同类型的容器和元素。适用于所有容器
vector<int> v1=v2
; //同上
vector<int> v(b,e) ; // 创建一个容器,其元素是迭代器b和e指定范围内元素的副本。适用于所有容器
vector<int> v(n)
; //创建一个包含n个元素的容器。只适用于顺序容器
vector<int> v(n,t) ; //用n个值为t的元素创建容器.只适用于顺序容器
(3) 列表初始化
vector<string> authors = { "Tom","Jack","Frank" };
//创建一个空的容器
2.容器操作
2.1向容器中添加元素
- c.push_back() :在容器c的尾部添加值为t的元素。返回void。
- c.push_front(t) :在容器c的前端添加值为t的元素。返回void。一般用于list容器,vector容器不可用push_front在前端插入元素。
- c.insert(p,t) :在迭代器p所指向的元素前面插入值为t的新元素。返回指向该元素的迭代器。
- c.insert(p,n,t) :在迭代器p所指向的元素前面插入n个值为t的新元素。返回指向第一个新加元素的迭代器。
- c.insert(p,b,e) :在迭代器p所指向的元素前面插入由迭代器b和e标记的范围内的元素。返回指向第一个新加元素的迭代器。
特别注意: vector容器不可以采用push_front在前端插入元素,但可以使用insert的方式在前端插入,如下。但是不建议这样做,因为:vector在末尾以外的任何位置插入元素都将十分耗时。
vector<string> vec
vec.insert( vec.begin() , "hello" );//vec.begin() 返回一个迭代器,它指向容器vec的第一个元素
向容器中添加元素的一个实例
//此实例通过使用insert的返回值,可以在容器的特定位置反复插入元素
list<string> lst
auto iter = lst.begin();
//需要插入元素的位置
while ( cin>>word )
iter = lst.insert(iter,word);
//将insert()返回值传给iter
2.2赋值与swap操作
- c1=c2:删除容器c1的所有元素,然后将c2的元素复制给c1。c1和c2的类型必须相同。
- c1.swap(c2):交换c1和c2的内容,c1和c2的类型必须相同。效率比把c2元素复制到c1中要高。
- c.assign(b,e) :将容器c的元素替换为迭代器b和e标记范围内的元素。b和e必须不是指向c中元素的迭代器。
- c.assign(n,t) :将容器c重新设置为存储n个值为t的元素。
- c.assign( il ) :将容器c的元素替换为il列表中的元素。
2.3访问容器中的元素
- c.back() :返回容器c的最后一个元素的引用。如果c为空,则函数行为未定义
- c.front() :返回容器c的第一个元素的引用。如果c为空,则函数行为未定义
- c[n] :返回下标为n的元素的引用。n为无符号整型,若n>=c.size(),则函数行为未定义
- c. at(n) :返回下标为n的元素的引用。如果下标越界,则抛出异常
**特别注意:**上述操作返回的都是引用,这意味着,若容器不是const的,则可以通过该引用来改变元素的值。如下:
c.front() = 42;
//将42赋值给容器c的第一个元素
2.4删除容器中的元素
- c.clear()——删除容器c内的所有元素。返回void。
- c.pop_back() ——删除容器c的最后一个元素。返回void。如果容器为空,则该函数未定义
- c.pop_front()——删除容器c的第一个元素。返回void。只适用于list和deque容器
- c.erase( p)——删除迭代器p指向的元素。返回一个迭代器,它指向被删除元素后面的元素。如果p指向容器内最后一个元素,则返回的迭代器指向容器的超出末端的下一位置。如果p本身就是超出容器末端的下一个位置,则该函数未定义。
- c.erase(b,e) ——删除迭代器b和e所标记的范围内所有元素。返回一个迭代器,它指向被删除元素段后面的元素。如果e本身就是指向超出容器末端的下一个位置,则返回的迭代器也指向容器末端的下一个位置。
2.5大小操作
- c.size()——c中元素的数目。
- c.max_size() ——c可保存的最大元素数目。
- c.empty()——判断c是否为空。是空返回true,非空返回false。
3.类型别名
- iterator:容器的迭代器类型
- const_iterator:只能用于读取元素的迭代器类型
- size_type:无符号整型
- value_type:元素类型
示例:
list<string>
a = { "M","F","I"};
list<string>::iterator it1 = a.begin();
//显示指定迭代器类型
list<string>::const_iterator it2 = a.begin();//显示指定常迭代器类型
auto it3 = a.begin();
//it3是iterator还是const_iterator由a决定。仅当a定义为const类型时,it3才为const_iterator
auto it4 = a.cbegin();
//it4为const_iterator
最后
以上就是光亮大地为你收集整理的【c++】顺序容器(vector等)引言1.容器定义与初始化2.容器操作3.类型别名的全部内容,希望文章能够帮你解决【c++】顺序容器(vector等)引言1.容器定义与初始化2.容器操作3.类型别名所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复