STL顺序容器(C++ Primer记)

STL顺序容器概览

在这里插入图片描述

1.容器定义和初始化

在这里插入图片描述

//For example

	vector<int>a;//空

	vector<int>b(a);  //b是a的拷贝
	vector<int>c = b; //与上一行等价

	vector<int>d{ 1,2,3,4,5 };//列表初始化
	vector<int>e{ 1,2,3,4,5 };//与上一行等价

	vector<int>f(b.begin()+1, b.end());
							//从b第二个开始到最后一个元素复制到f
	
	array<int,5> a1;		//数组具有固定大小
	array<int,5> a2={1,2,3,4,5} ;
	array<int,5> a3={1} ; 	//剩余元素为0
	

注意:不能对内置数组进行拷贝或对象赋值操作

//For example
int a[5]={1,2,3,4,5};
int b[5]=a;		//错误,内置数组不支持

array<int,5> a={1,2,3,4,5};
array<int,5> b=a;		//正确

2.赋值和交换操作

在这里插入图片描述

//For example
	vector<int>a = { 1,2,3 };
	vector<int>b = { 4,5,6 };
	
	b = a;
	b = { 1,2,3 };

	swap(a, b); //a b互换

assign操作(仅支持顺序容器):

赋值运算符要求两侧必须为相同的类型,而assign允许从一个不同但相容的类型赋值,或者从容器的一个子序列赋值。
参数所指定的元素替换左边容器中的所有元素

//For example
list<string>names;
vector<const char*> oldstyle;

names=oldstyle;	//错误,容器类型不匹配

names.assign(oldstyle.cbegin(),oldstyle.cend());
				//正确,const char* 可以转换为string

3.容器大小操作

除了forward_list,每个容器类型都有三个与大小相关的而操作:

  • 成员函数size: 返回容器中元素的数目
  • 成员函数empty: 当size为 0 时返回 bool 值 true
  • 成员函数max_size: 返回一个大于或等于该类型容器所能容纳的最大元素数的值

4.关系运算符

每个容器类型都支持: 相等运算符(== !=)
除无序关联容器外都支持: 关系运算符(> >= < <=)

关系运算符两边必须是相同类型的容器,且必须保存相同类型的元素
例如:vector<int>只能与vector<int>比较

比较规则:
两个容器每个元素逐对比较,与string的关系运算相似。

  1. 两个容器大小、元素都相等,则两者相等
  2. 两个容器大小不同,较小容器中的每个元素都等于较大容器中对应元素,则较小容器小于较大容器
  3. 两个容器都不是另一个容器的前缀子序列,比较结果取决于第一个不相等元素的比较结果。
vector<int> v1={1,3,5,7,9,12};
vector<int> v2={1,3,9};
vector<int> v3={1,3,5,7};
vector<int> v4={1,3,5,7,9,12};

v1<v2		//true 情况3
v1<v3		//false	情况2
v1==v4		//true	情况1
v1==v2		//false	情况1

顺序容器操作

1.添加或插入元素(array,forward_list除外)

在这里插入图片描述

  • emplace_frontemplaceemplace_back这三个操作分别对应push_front,insert ,push_back.
    区别在于emplace将参数传递到元素类型的构造函数, 而不是传递对象
    在这里插入图片描述
2.访问操作

在这里插入图片描述

  • 注意:.front().back()直接访问首尾元素(闭区间)而.begin().end()是左闭右开区间(即.end()-1==.back()
3.删除操作(除array forward_list)

在这里插入图片描述

4. forward_list的操作

.before_begin()称为首前迭代器
在这里插入图片描述

5.改变容器大小

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

本文截图来自 C++ Primer(第5版)中文版
ISBN 978-7-121-15535-2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值