@songying
2018-12-17T13:08:07.000000Z
字数 1428
阅读 967
STL容器: Lists
STL
特性
- 采用双向链表管理元素
- 不支持随即存取,很慢
- 任何位置上元素插入,删除都很快,O(1)
函数操作
1. 构造函数与析沟函数
操作 |
说明 |
#inclide <list> |
头文件导入 |
list<Elem> c |
产生一个空list,其中没有任何元素 |
list<Elem> c1(c2) |
产生另一个同类型list的副本(元素拷贝) |
list<Elem> c(n) |
利用元素的default 构造函数生成大小为n的 list |
list<Elem> c(n,elem) |
产生一个大小为n的list, 每个元素值都是elem |
list<Elem> c(beg, end) |
产生一个list, 以区间[begin;end] 作为元素初值 |
c.~list<Elem> () |
销毁所有元素,并释放内存 |
c1 = {val1, val2,...} |
初始化赋值 |
c1{val1, val2,...} |
初始化赋值 |
2. 不变操作
函数 |
说明 |
c.size() |
返回当前的元素数量 |
c.empty() |
判断list是否为空,等价于size()==0,但可能更快 |
c.max_size() |
返回可容纳的元素最大数量 |
3. 操作符相关
函数 |
说明 |
c1 == c2 |
判断c1是否等于c2,当且仅当它们元素数量且对应位置上的元素值也相同 |
c1 != c2 |
|
c1 < c2 |
以字典顺序进行比较 |
c1 > c2 |
|
c1 <= c2 |
|
c1 >= c2 |
|
4. 赋值操作
函数 |
说明 |
c1 = c2 |
将c2的全部元素赋值给c1 |
c.assign(n, elem) |
将n个elem的copy 赋值给c |
c.assign(beg, end) |
将区间[beg;end] 内的元素赋值给c |
c1.swap(c2) |
将c1和c2 的元素互换 |
swap() |
将c1和c2 的元素互换, 此为全局函数 |
5. 元素存取
函数 |
说明 |
c.front() |
返回第一个元素,不检查第一个元素是否存在 |
c.back() |
返回最后一个元素,不检查最后一个元素是否存在 |
6. 迭代器相关函数
函数 |
说明 |
c.begin() |
返回一个随机存取迭代器,指向第一元素 |
c.end() |
返回一个随机存取迭代器,指向最后元素的下一位置 |
c.rbegin() |
返回一个逆向迭代器,指向逆向迭代的第一元素 |
c.rend() |
返回一个逆向迭代器,指向逆向迭代的最后元素的下一位置 |
7. 插入,删除操作
函数 |
说明 |
c.insert(pos, elem) |
在pos位置插入elem, 返回新元素位置 |
c.insert(pos, n, elem) |
在pos位置插入n个elem,无返回值 |
c.insert(pos, beg, end) |
在pos位置插入区间[beg;end]内的所有元素,无返回值 |
c.push_back(elem) |
在尾部添加一个elem |
c.pop_back() |
移除最后一个元素,无返回值 |
c.push_front(elem) |
在头部添加elem的副本 |
c.pop_front() |
移除头部元素,无返回值 |
c.remove(val) |
移除所有值为val的元素 |
c.remove_if(op) |
移除所有“造成op(elem)结果为true"的元素 |
c.erase(pos) |
移除pos位置上的元素,返回下一元素位置 |
c.erase(beg, end) |
移除[beg,end]区间内的所有元素,返回下一元素位置 |
c.resize(num) |
将大小(元素个数) 改为num。如果size()增大了,新增元素都以default构造函数产生出来 |
c.resize(num, elem) |
将元素个数改为num,如果size()增大了,新增元素都是elem的副本 |
c.clear() |
移除所有元素,将容器清空 |
8. 特殊变动操作