
本章主要概括性地介绍容器,以及容器的时间复杂度和对比
时间复杂度上的比较:??
分类:
1.序列式容器
序列式容器在STL中主要包含常见的三种:向量vector、链表list和双端队列deque。
1.1 向量vector为一种顺序存储同类型元素的数据结构。它是一种数组方式的思路实现,并且可以随机访问的序列。sort排序
1.2 链表list是一种实现双向链表数据结构的容器。它只支持顺序访问序列中的元素。该容器在删除、插入相应元素时,效率较高。另外,list可以与vector一样在需要时动态改变其大小。
1.3 双端队列deque是类似向量的一种队列结构。它允许在该队列的头部和尾部插入并且删除相应的元素。同时,它也支持针对其元素的顺序以及随机访问。
2.关联式容器
关联式容器则是采用了key-value键值的方式存储和访问容器中的元素。关联式容器采用红黑树结构,支持快速、随机并且高效的检索其中的元素。关联式容器主要包含set、multiset、map以及multimap容器。
set容器支持随机存取,并且其键与对应的数据元素为同一个值。该容器中所有的元素必须是唯一的,不能包含重复的元素。
multiset容器则在set基础上可以包含重复的元素。同样,该容器的键与对应的元素也是为同一值。
map是一个包含键值对的容器。该容器允许存在重复的键值,但每个键只能与一个值相互对应。
multimap提供单个关键词可以对应多个数据的数据结构操作,
STL还定义了一些容器适配器: 如 stack , queue, priority_queue??
vector
vector的7种初始化方法:
????????????????vector<int> v1;
vector<int> v2(v1);
vector<int> v3 = v1;
vector<int> v4(5, 1);
vector<int> v5(5);
vector<int> v6{ 1, 2, 3, 4, 5 };
vector<int> v7 = { 1, 2, 3, 4, 5 };pushi_back( )往尾部添加元素
pop_back() 删除最后一个元素
empty( ) 判断是否为空
size( )?? 存入数据个数
swap()?? ??替换2个vecotr中的元素????
insert()?? 在指定位置插入数据
vector虽然可以动态增长,但是有两个限制:
不能在范围for循环中向vector添加元素。sort排序
任何一种改变vector对象容量的操作会使迭代器失效,即凡是使用了迭代器的循环体,都不要向迭代器所属容器添加元素。
vector的迭代器是随机存取迭代器,两个迭代器之间可以相互比较,加减
和vector一样,重载了比较运算符,按照字典顺序比较 vector 中的值??
List将元素按顺序储存在链表中. 与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢
assign() 给list赋值??
back() 返回最后一个元素??
begin() 返回指向第一个元素的迭代器??
clear() 删除所有元素??
empty() 如果list是空的则返回true??
end() 返回末尾的迭代器??
erase() 删除一个元素??
front() 返回第一个元素??
insert() 插入一个元素到list中??
max_size() 返回list能容纳的最大元素数量??
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-70158-1.html
无奈上天给她开了个玩笑