C++11 容器

一、顺序容器

1、vector:可变数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢;

2、deque:双端队列。支持快速随机访问。在头尾位置插入/删除速度很快;

3、list:双向链表。只支持双向顺序访问。在list任何位置进行插入/删除操作速度都很快;

4、forward_list:单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作速度都很快;

5、array:固定大小数组。支持快速随机访问。不能添加或删除元素;

6、string:与vector相似的容器,但专门用于保存字符。随机访问快。在尾部插入/删除速度快;
 

二、关联容器

按关键字有序保存元素:

1、map:关联数组。保存关键字-值对;

2、set:关键字即值,即只保存关键字的容器;

3、multimap:关键字可重复出现的map;

4、multiset:关键字可重复出现的set;

无序集合:

1、unordered_map:用哈希函数组织的map;

2、unordered_set:用哈希函数组织的set;

3、unordered_multimap:用哈希函数组织的map,关键字可以重复出现;

4、unordered_multiset:用哈希函数组织的set,关键字可以重复出现。

C++11中新增的容器

C++11中新增的容器
array
forward_list
unordered_map,unordered_set,unordered_multimap,unordered_multiset
元组Tuple

array

介于数组和vector之间,比vector高效,vector实在堆空间上,array是在栈上。


#include <iostream>
#include <array>
#include <algorithm>
using namespace std;

int main()
{
	array<int,3>a={1,2,3};
	array<int,3> b(a);
	for_each(a.begin(),a.end(),[](int i){cout<<i<<" ";});
	cout<<endl;
	sort(b.begin(),b.end(),[](int a,int b){return a>b;});
	for_each(b.begin(),b.end(),[](int i){cout<<i<<" ";});
	return 0;
}

forward_list

唯一一个不提供size()方法的容器,list是双向链表,他是单向。提供O(1)时间的插入操作。

unordered_map,unordered_set,unordered_multimap,unordered_multiset

元组Tuple

可以将任意种类型建立闭包,和pair类似,但pair只能两个类型。

#include <iostream>
#include <tuple>
using namespace std;
int main()
{
	tuple<int,string,int> tup1(1,"rita",1);
	cout<<get<0>(tup1)<<" ";
	cout<<get<1>(tup1)<<" ";
	cout<<get<2>(tup1)<<" "<<endl;
	
	auto tup2=make_tuple(2,"hero",2);//用于创建
	cout<<get<0>(tup2)<<" ";
	cout<<get<1>(tup2)<<" ";
	cout<<get<2>(tup2)<<" "<<endl;
	
	int tup2_first=0;
	string tup2_sencond;
	int tup2_third=0;
	tie(tup2_first,tup2_sencond,tup2_third)=tup2;//拆分
	cout<<tup2_first<<" " <<tup2_sencond<<" "<< tup2_third<<endl;
	
	tup2=forward_as_tuple(3,"HERO",3);//用于接受右值引用。
	cout<<get<0>(tup2)<<" ";
	cout<<get<1>(tup2)<<" ";
	cout<<get<2>(tup2)<<" "<<endl;
	
	auto tup3=tuple_cat(tup1,tup2);//用于连接。
	cout<<get<0>(tup3)<<" ";
	cout<<get<1>(tup3)<<" ";
	cout<<get<2>(tup3)<<" ";
	cout<<get<3>(tup3)<<" ";
	cout<<get<4>(tup3)<<" ";
	cout<<get<5>(tup3)<<" "<<endl;
	cout<<sizeof(tuple_element<0,decltype(tup1)>::type)<<endl;// 获取数据类型
	cout<<tuple_size<decltype(tup3)>::value<<endl;//获取元素个数	
}

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花逐流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值