STL 容器总结(一)

来源:互联网 发布:淘宝商机助手 编辑:程序博客网 时间:2024/05/27 01:16

一、所有容器的共通操作
1、equality(==) 和 inequality(!=) 运算符, 返回 true 或者 false。
2、assignment(=) 运算符,将某个容器复制给另一个容器。
3、empty() 会在容器没有任何元素的时候返回 true,否则 false。
4、size() 返回目前容器中持有元素的数目。
5、clear() 清除所有元素

二、 每个容器都提供了begin() 、end()、 insert()、 erase() 函数
1、begin() 返回一个 iterator,指向容器的第一个元素。
2、end() 返回一个iterator,指向容器的最后一个元素的下一个位置。
3、insert() 将单一或某个范围内的元素插入容器内。
4、erase() 将容器内单一或某个范围内的元素删除。

三、 顺序性容器

vector

1、vector 和 list 是最主要的两个顺序性容器。
2、vector 以一块连续的内存来存放元素,对 vector 进行随机访问,比较有效率,vector 内的每个元素都被存储在距离起始点的固定偏移位置上。如果将元素插入任意位置,而不是末端,那么效率将很低,因为插入位置右端的每一个元素,都必须被复制一份,然后依次向右移动。同样道理,删除 vector 内最后一个元素以外的任意元素,同样缺乏效率。

list

list 是双向链接,而非连续内存来存储内容,因此可以执行前进或者后退操作。list 中每个元素包含三个字段:value、back 指针、front 指针。在 list 的任意位置插入和删除都颇具效率,因为 list 本身只需设定 back 和 front 指针即可。如果对 list 进行随机访问的操作,则效率欠佳,因为每次访问都必须遍历介于其中的所有元素。

deque

deque 和 vector 行为比较相似,都以连续内存来存储元素。和 vector 不同的是,deque 对于前端元素的插入和删除效率更高,末端亦同。如果我们需要在容器前端插入元素,并执行末端的删除操作,deque 比较理想。(标准库的 queue 以 deque 作为底部存储元素)

定义容器的方法

# 产生空的容器:list<string> slist;vector<int> ivec;# 产生特定大小的容器:list<int> ilist(1024);vector<string> svec(32);# 产生特定大小的容器,并制定初值:list<int> ilist(10, -11);vector<string> svec(12, "hello");# 通过一对iterator产生容器:int ia[6] = {1, 2, 3, 4, 5, 6};vector<int> ivec(ia, ia+6);# 复制容器list<string> slist(1, "hello");list<string> slist1(slist);

push_back() 会在末尾插入一个元素
pop_back() 会删除末尾的最后一个元素
除此之外,list 和 deque (不包括 vector) 还提供了 push_front() 和 pop_front() 。
pop_back() 和 pop_front() 这两个操作函数并不会返回被删除的元素值。因此,如果要读取最前端的元素,使用front() ,读取末端元素,使用back() 。

0 0