deque构造函数
/*
* deque构造函数
*/
/*
* 功能:
* 双端数组,可以对头端进行插入删除操作
*
* deque与vector区别:
* vector对于头部的插入删除效率低,数据量越大,效率越低
* deque相对而言,对头部的插入删除速度比vector快
* vector访问元素时的速度会比deque快,这个两者内部实现有关
*
* deque内部工作原理:
* deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
* 中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
*/
#include <iostream>
#include <deque>
void printDeuqe(const std::deque<int> &d)
{
for(auto it = d.begin(); it != d.end(); it++)
{
std::cout<<*it<<" ";
}
std::cout<<std::endl;
}
void test01() {
std::deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
printDeuqe(d1);
std::deque<int> d2(d1.begin(), d1.end());
printDeuqe(d2);
std::deque<int> d3(10, 100);
printDeuqe(d3);
std::deque<int> d4(d3);
printDeuqe(d4);
}
int main()
{
test01();
return 0;
}
赋值操作
/*
* 赋值操作
*/
#include <iostream>
#include <deque>
void printDeuqe(const std::deque<int> &d)
{
for(auto it = d.begin(); it != d.end(); it++)
{
std::cout<<*it<<" ";
}
std::cout<<std::endl;
}
void test01()
{
std::deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
printDeuqe(d1);
//operator =赋值
std::deque<int> d2;
d2 = d1;
printDeuqe(d2);
//assign 赋值
std::deque<int> d3;
d3.assign(d1.begin(), d1.end());
printDeuqe(d3);
std::deque<int> d4;
d4.assign(10, 100);
printDeuqe(d4);
}
int main()
{
test01();
return 0;
}
大小操作
/*
* 大小操作
*/
#include <iostream>
#include <deque>
void printDeuqe(const std::deque<int> &d)
{
for(auto it = d.begin(); it != d.end(); it++)
{
std::cout<<*it<<" ";
}
std::cout<<std::endl;
}
void test01()
{
std::deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
printDeuqe(d1);
if(d1.empty())
{
std::cout<<"d1 is empty"<<std::endl;
}
else
{
std::cout<<"d1 is not empty"<<std::endl;
std::cout<<"d1.size: "<<d1.size()<<std::endl;
//deque没有容量概念
}
d1.resize(15);
printDeuqe(d1);
d1.resize(15, 1);
printDeuqe(d1);
d1.resize(5);
printDeuqe(d1);
}
int main()
{
test01();
return 0;
}
插入和删除
/*
* 插入和删除
*/
#include <iostream>
#include <deque>
void printDeuqe(const std::deque<int> &d)
{
for(auto it = d.begin(); it != d.end(); it++)
{
std::cout<<*it<<" ";
}
std::cout<<std::endl;
}
//两端操作
void test01()
{
std::deque<int> d1;
//尾插
d1.push_back(10);
d1.push_back(20);
//头插
d1.push_front(100);
d1.push_front(200);
printDeuqe(d1);
//尾删
d1.pop_back();
printDeuqe(d1);
//头删
d1.pop_front();
printDeuqe(d1);
}
void test02()
{
std::deque<int> d1;
d1.push_back(10);
d1.push_back(20);
d1.push_front(100);
d1.push_front(200);
printDeuqe(d1);
//insert插入
d1.insert(d1.begin(), 1000);
printDeuqe(d1);
d1.insert(d1.begin(), 2, 10000);
printDeuqe(d1);
//按照区间进行插入
std::deque<int> d2;
d2.push_back(1);
d2.push_back(2);
d2.push_back(3);
d1.insert(d1.begin(), d2.begin(), d2.end());
printDeuqe(d1);
}
//删除
void test03()
{
std::deque<int> d1;
d1.push_back(10);
d1.push_back(20);
d1.push_front(100);
d1.push_front(200);
auto it = d1.begin();
it++;
d1.erase(it);
printDeuqe(d1);
//清空
d1.clear();
printDeuqe(d1);
}
int main()
{
// test01();
// test02();
test03();
return 0;
}
数据存取
/*
* 数据存取
*/
#include <iostream>
#include <deque>
void test01()
{
std::deque<int> d1;
d1.push_back(10);
d1.push_back(20);
d1.push_back(30);
d1.push_front(100);
d1.push_front(200);
d1.push_front(300);
//通过[]方式访问元素
for(int i = 0; i < d1.size(); i++)
{
std::cout<<d1[i]<<" ";
}
std::cout<<std::endl;
//通过at方式访问元素
for(int i = 0; i < d1.size(); i++)
{
std::cout<<d1.at(i)<<" ";
}
std::cout<<std::endl;
std::cout<<"front: "<<d1.front()<<std::endl;
std::cout<<"back: "<<d1.back()<<std::endl;
}
int main()
{
test01();
return 0;
}
排序操作
/*
* 排序操作
*/
/*
* sort
*/
#include <iostream>
#include <deque>
#include <algorithm>
void printDeuqe(const std::deque<int> &d)
{
for(auto it = d.begin(); it != d.end(); it++)
{
std::cout<<*it<<" ";
}
std::cout<<std::endl;
}
void test01()
{
std::deque<int> d;
d.push_back(10);
d.push_back(20);
d.push_back(30);
d.push_front(100);
d.push_front(200);
d.push_front(300);
printDeuqe(d);
//排序 默认排序规则是从小到大
//对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
std::cout<<"after sort: "<<std::endl;
std::sort(d.begin(), d.end());
printDeuqe(d);
}
int main()
{
test01();
return 0;
}