C++之vector-list-deque容器相关介绍

1、顺序容器

    vector 支持快速随机访问  ,代价:中间插入元素开销大 。

     list 支持快速插入和删除 ,代价:随机访问开销大   。

    deque 双端队列,从两端插入和删除数据都比较快。

2、容器构造函数

C<T> c; 创建一个名为c 的空容器。c 是容器类型名,如vector , T 是元素类型,如int 或string 。适用于所有容器
C c(c2};   创建容器c2 的副本c; c 和c2 必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器
C c (b , e) ;   创建c ,其元素是迭代器b 和e 标示的范围内元素的副本。适用于所有容器
C c (n , t) ; 用n 个值为t 的元素创建容器C ,其中值t 必须是容器类型c 的元素类型的值,或者是可转换为该类型的值,只适 用于顺序容器
C c (n) ; 创建有n 个值初始化C3.3.1 节) Cvalue-initialized) 元素的容器c,只适用于顺序容器
 

3、访问容器内元素的操作。

c[n]      返回下标为n的元素的引用, 如果n<O 或n>=c .s ize() ,则该操作未定义 。  只适用于vector 和deque 容器。
c.at(n)   返回下标为n 的元素的引用。如果下标越界,则该操作未定义。 只适用于vector 和deque 容器
list是链表存储,并不支持随机访问,所以无法通过下标的方式索引。
 
测试代码:
//vector容器常规使用
void test_Vector() {
	// *** vector 容器,连续内存区域,支持快速 随机访问读,插入删除效率低 ***

	vector 初始化
	vector<int> v0;			//默认构造函数, v0为空
	vector<int> v1(10, 5);	//指定值初始化,十个值为5的容器
	vector<int> v2(v1);		//拷贝构造,v2是v1的副本
	vector<int> v3(10);		//十个值为0的容器,标准库默认初始化0
	int a[] = { 1,2,3,4,5 };
	vector<int> v_a(a, a+5);//数组元素初始化

	常规操作
	bool isEmpty = v1.empty();//判断是否为空
	vector<int>::size_type size1 = v1.size();//返回容器大小, size=10
	v1.resize(100);//重新定义大小
	size1 = v1.size();//size=100
	vector<int>::size_type cap_size = v1.capacity();//返回容器容纳个数,大于等于size(); cap_size=100


	插入元素
	v0.push_back(11);//在容器v0末尾添加一个值为11 的元素
	v0.push_back(22);//在容器v0末尾添加一个值为22 的元素
	v0.push_back(33);//在容器v0末尾添加一个值为33 的元素
	
	v0.insert(v0.begin()+1, 99);//在迭代器指向元素的前面插入值,[11 99 22 33]


	获取元素
	int ele = v0[0];//支持随机访问元素, =11
	int ele_ = v0.at(1);//支持随机访问元素,=99
	int ele_first = v0.front();//容器的第一个元素, =11
	int ele_end = v0.back();容器的最后一个元素, =33

	删除
	vector<int>::iterator iter = v0.begin();
	v0.erase(iter);//删除第一个元素, [ 99 22 33]
	size1 = v0.size();//size=3
	cap_size = v0.capacity();//cap_size=4, 
	v0.clear();//清空元素, size=0
	cap_size = v0.capacity();//** cap_size=4 ,元素删除或清空不会影响capacity**
	
	//迭代器遍历
	for (vector<int>::iterator iter=v_a.begin(); iter !=  v_a.end(); ++iter)
	{
		cout << "v_a element: " << *iter << endl;
		*iter += 10;//更改每个元素的值
		cout << "add result:" << *iter<<endl;
	}
}

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值