STL 之 deque
2014-03-05 18:44
225 查看
begin | 第一个节点 |
end | 最后一个节点(此节点在数据区之外) |
rbegin | 反转的第一个节点 |
rend | 反转的最后一个节点 |
crbegin | 常量,不可改变值 |
crend | -(同上) |
cbegin | - |
cend | - |
clear | 清空数据区(但保留一个缓冲区) |
push_back | 在尾端添加节点 |
push_front | 在首端添加节点 |
pop_back | 移除尾端 |
pop_front | 移除首端 |
erase | 1,de.erase(position):清除某一位置 2,de.erase(first, last):清除某一区间 |
insert | 1,de.insert(position, val):在位置position插入元素val 2,de.insert(position, n, val):在位置position插入n个元素val 3,de.insert(position, first, last):在位置position插入另一容器的first-last区间 |
resize | 1,resize(n ,val=0):设置大小为n,填充为val |
assign | 1,assign(n, val=0) 2,assign(first, last) |
empty | |
swap | 交换两个容器 |
deque数据结构比较特殊,它是由map指针与数据缓冲区组成,每个map节点指向一个数据缓冲区;每次需要扩充时,都是以缓冲区为单位扩充的,每次扩充一个,deque至少应有一个缓冲区。
deque也是最灵活的数据结构,它重载了几乎所有的操作、运算符。
下图是从STL-源码剖析中copy出来的,它充分说明了deque的存储结构:
以下是实践代码:
#include <iostream> #include <cstdlib> #include <algorithm> #include <deque> #include <iterator> #include <ctime> using namespace std; void O(deque<int>de, char* s) { cout << s << endl; copy(de.begin(), de.end(), ostream_iterator<int>(cout, " ")); if (de.empty()) cout << "E"; cout << endl << endl; } int main() { deque<int>de, d2; deque<int>::iterator iter; deque<int>::reverse_iterator rev_iter; deque<int>::const_iterator con_iter; int i, j, k; srand(time(NULL)); for (i = 0; i < 4; i++) de.push_back(rand()%(rand()%1000+10)); for (i = 0; i < 4; i++) de.push_back(rand()%(rand()%10000+20)); O(de, "----de----"); cout << sizeof(de) << endl; de.pop_back(); O(de, "----pop_back----"); de.pop_front(); O(de, "----pop_front----"); cout << de.size() << endl; // 大小 d2.clear(); O(d2, "----init----"); d2.assign(de.begin(), de.end()); O(d2, "----assign d2----"); de.assign(4, 1); O(de, "----assign----"); cout << "----ex at----" << endl; cout << d2.at(3) << endl; cout << "----ex front----" << endl << d2.front() << endl; cout << "----ex back----" << endl << d2.back() << endl; cout << "----reverse----" << endl; for (rev_iter = d2.rbegin(); rev_iter != d2.rend(); rev_iter++) cout << *rev_iter << " "; cout << endl << endl; de.resize(1); O(de, "----resize(1)----"); de.resize(5, 2); O(de, "----resize(5,2)----"); de.erase(de.begin()); O(de, "----erase(de.begin())----"); de.insert(de.begin(), 4); O(de, "----insert(de.begin(), 4)----"); de.insert(de.begin(), 4, -10); O(de, "----insert(de.begin(), 4, -10)----"); de.insert(de.begin(), d2.begin(), d2.begin()+2); O(d2, "----d2 value----"); O(de, "----insert(de.begin(), d2.begin(), d2.begin()+2)----"); O(d2, "-----d2 value----"); O(de, "-----de value----"); de.swap(d2); O(d2, "-----after d2 value----"); O(de, "-----after de value----"); con_iter = de.cbegin(); //con_iter是常量不能进行赋值,类似的还有cend, crbegin, crend cout << *con_iter << endl; getchar(); exit(0); }
相关文章推荐
- 浅析STL中的常用算法
- c++ STL容器总结之:vertor与list的应用
- 关于STL中list容器的一些总结
- 关于STL中的map容器的一些总结
- 浅析stl序列容器(map和set)的仿函数排序
- STL list链表的用法详细解析
- stl容器set,map,vector之erase用法与返回值详细解析
- STl中的排序算法详细解析
- 关于STL中vector容器的一些总结
- 关于STL中set容器的一些总结
- 简单说说STL的内存管理
- STL中算法
- STL简单应用
- vector-list-deque
- 三十分钟掌握STL
- 1.sort()
- 刚刚接触到一个STL的函数make_pair()
- 简单使用C++的STL
- stl-stable_sort源码学习笔记
- 封装好的Folyd建图,C++源码