STL——vector和list

        vector和list为STL中的顺序容器,顺序容器会依次维护第一个到最后一个元素,在顺序容器上,我们主要的操作就是迭代。

头文件:
#include<vector>
#include<list>
1、vector
特点:
连续存储结构
随机访问和尾端插入\删除操作效率高
动态的内存空间扩展(与内建数据的区别)
内存分配原理:
首先分配一块内存空间进行预备存储,当存储元素所需内存超过这个空间之后,则再整体重新分配一个更大的存储空间。扩充空间的过程如下:
(1)分配一块新的内存空间;
(2)将原空间内的元素复制到新空间中;
(3)释放原来的存储空间
size()返回的是当前存储的元素个数;
capacity()返回的是当前可存储的元素个数(即预分配存储空间的大小);

成员函数:
c.assign(beg,end)             将[beg; end)区间中的数据赋值给c。 
c.assign(n,elem)              将n个elem的拷贝赋值给c。
c.at(idx)                     传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back()                      传回最后一个数据,不检查这个数据是否存在。
c.begin()                     容器中第一个元素的迭代器。
c.capacity()                  返回容器最大存储容量。
c.clear()                     移除容器中所有数据。
c.empty()                     判断容器是否为空。
c.end()                       容器中最后一个元素下一个地址迭代器。
c.erase(pos)       删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end)              删除[beg,end)区间的数据,传回下一个数据的位置。
c.front()                     传回第一个数据。
c.insert(pos,elem)            在pos位置插入一个elem拷贝,传回新数据位置。
c.insert(pos,n,elem)          在pos位置插入n个elem数据。无返回值。
c.insert(pos,beg,end)         在pos位置插入在[beg,end)区间的数据。无返回值。
c.max_size()                  返回容器中最大数据的数量。
c.pop_back()                  删除最后一个数据。
c.push_back(elem)             在尾部加入一个数据。
c.rbegin()                    传回一个逆向队列的第一个数据迭代器。
c.rend()                      传回一个逆向队列的最后一个数据的下一个位置迭代器。
c.resize(num)                 重新指定容器的长度。
c.reserve()                   保留适当的容量。
c.size()                      返回容器中实际数据的个数。
c1.swap(c2)                   将c1和c2元素互换。
swap(c1,c2)                   同上操作。


构造函数与析构函数:
vector<Elem> c
vector <Elem> c1(c2)
vector <Elem> c(n)
vector <Elem> c(n, elem)
vector <Elem> c(beg,end)
c.~ vector <Elem>()

2、list
特点:
非连续存储结构,底层为双链表实现
每个结点包括本元素值、前向指针、后向指针,额外的指针维护带来更多的内存开销
随机插入\删除效率高,随机访问效率低
不支持下标操作([])和.at()操作


 list成员函数:
assign() 给list赋值
back() 返回最后一个元素
clear() 删除所有元素
empty() 如果list是空的则返回true
end() 返回末尾的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回list的配置器
insert() 插入一个元素到list中
max_size() 返回list能容纳的最大元素数量
merge() 合并两个list
pop_back() 删除最后一个元素
pop_front() 删除第一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin() 返回指向第一个元素的逆向迭代器
remove() 从list删除元素
remove_if() 按指定条件删除元素
rend() 指向list末尾的逆向迭代器
resize() 改变list的大小
reverse() 把list的元素倒转
size() 返回list中的元素个数
sort() 给list排序
splice() 合并两个list
swap() 交换两个list
unique() 删除list中重复的元素

猜你喜欢

转载自blog.csdn.net/fangyan5218/article/details/80087472