#include <vector>
#include <string>
#include <iostream>
#include <list>
#include <iterator>
#include <deque>
using namespace std;
bool fun(int a)
{
return a>5;
}
// deque double extermity queue 双端队列
// deque没有容量的概念,其内部采用分段连续内存空间来存储元素,
// 在插入元素的时候随时都可以重新增加一段新的空间并链接起来。
// deque维护着一个map,用来记录每个缓冲区的位置。 键值对
int main()
{
// 构造
deque<int> d1 = {1,2,3};
deque<int> d2 {1,2,3};
deque<int> d3 (100); //100个 默认值为0
deque<int> d4 (100,2); //100个2
deque<int> d5 (d1);
deque<int> d6 (d1.begin(), d1.end());
vector<int> v1 = {1,2,3};
list<int> l1 = {1,2,3};
//deque<int> d7 (v1); //报错
//deque<int> d8(l1); //报错
// deque维护着一个map<首地址,大小> map的每个键值对是vector形式的,但键值对之间是list形式的
// 所以deque本质既不是 vector 也不是 list 所以不能用vector或 list 为 deque赋值。
//d1.capacity(); deque同样没有capacity()方法
//增删改查操作 同vector 一些小区别如下
d1.push_front(2); //vector没有前插功能
d1.emplace_front(2);
d1.pop_front();
d1.clear();
//d1.rease(); deque没有按值删除
//get_allocator() 获取空间配置器
deque<int> d7;
int *p = d7.get_allocator().allocate(5);
cout << d7.size() << endl; //0
for (int i=0; i<5; i++)
d7.get_allocator().construct(&p[i],i);
for (int i=0; i<5; i++)
std::cout << ' ' << p[i]; //0 1 2 3 4
std::cout << '\n';
for (int i=0; i<5; i++)
d7.get_allocator().destroy(&p[i]);
for (int i=0; i<5; i++)
std::cout << ' ' << p[i]; //0 1 2 3 4
std::cout << '\n';
d7.get_allocator().deallocate(p,5);
for (int i=0; i<5; i++)
std::cout << ' ' << p[i]; //14835072 0 14811472 0 4
std::cout << '\n';
return 0;
}
c++ deque构造及方法 get_allocate()空间配置器的简单用法
最新推荐文章于 2019-10-03 15:59:55 发布