C++容器(3)Deque

Deque

双向数组
内部原理:
deque内部有一个中控器,维护每段缓冲地址的内容,缓冲区存放真实数据
中控器维护的是每个缓冲区的地址,使得使用deque像一片连续的内存空间

在这里插入图片描述
打印函数

void PrintDeque(const deque<int>d) {
 for (deque<int>::const_iterator it = d.begin();it != d.end();it++) {
  cout << *it<<" ";
 }
 cout << endl;
}

** 构造方式**

void test01() {

 deque<int> d;//不传参
 for (int i = 0;i < 10;i++) {
  d.push_back(i);
 }
 PrintDeque(d);
 deque<int>d2(d.begin(), d.end());//区间方式
 PrintDeque(d2);
 deque<int>d3(10,100);//n个指定值
 PrintDeque(d3);
 deque<int>d4(d3);//拷贝构造
 PrintDeque(d4);
}

** 赋值操作**

void test02() {

 deque<int> d;
 for (int i = 0;i < 10;i++) {
  d.push_back(i);
 }
 deque<int>d2 = d;//赋值号赋值
 PrintDeque(d2);
 deque<int>d3;
 d3.assign(d2.begin(), d2.end());//assign区间赋值
 PrintDeque(d3);
 deque<int>d4;
 d4.assign(10,100);//assign n个指定参数
}

** deque大小操作**

void test03() {

 deque<int> d;
 for (int i = 0;i < 10;i++) {
  d.push_back(i);
 }
 if (d.empty()) {
  cout << 1 << endl;
 }
 else {
  //不为空
  cout << 0 << endl;
  cout<<d.size();//d的大小
  //deque没有容量这个概率 因为是用中继器控制的
  //可以无限开拓空间只需在中继器中加上这个空间的首地址即可
 }
 //重新指定大小
 d.resize(15);//如果比原来长就用0填充
 d.resize(5);//比原来短就截断
 d.resize(10, 1);//重载 用1填充
}

deque插入和删除

void test04() {

 //二端操作
 deque<int>d;
 //头插
 d.push_back(1);
 d.push_back(2);
 //尾插
 d.push_front(3);
 d.push_front(4);
 PrintDeque(d);
 //尾删
 d.pop_back();
 //头删
 d.pop_front();
//指定位置
 d.insert(d.begin(), 100);//在头部插入100 第一个参数是一个迭代器 也可以通过定义一个迭代器在其他位置插入数据
 d.insert(d.begin(), 2,100);//重载,在头部插入2个100
 deque<int>d2;
 d2.insert(d2.begin(),d.begin(), d.end());//按区间插入
 //删除
 d2.erase(d2.begin());//删除第一个
 d2.erase(d2.begin(),d2.end());//按区间删除
 d.clear();//清空
}

deque数据存取

void test05() {

 deque<int> d;
 for (int i = 0;i < 10;i++) {
  d.push_back(i);
 }
 //听过[]方式输出
 for (int i = 0;i < d.size();i++)
  cout << d[i]<<" ";
 //通过at函数输出
 for (int i = 0;i < d.size();i++)
  cout << d.at(i) << " ";
 //访问头尾元素
 cout << d.front() << endl;
 cout << d.back() << endl;
}
发布了22 篇原创文章 · 获赞 15 · 访问量 5492

猜你喜欢

转载自blog.csdn.net/qq_42193790/article/details/104266010
今日推荐