导航
1.deque 基础点,构造函数
2.deque 的赋值
3.deque 的大小
4.deque 的插入与删除
5.deque 的数据存取
6.deque 算法排序
———————————————————————————————————
1.deque 基础点,构造函数
功能:双端数组,可以对头端进行插入删除操作
迭代器支持随机访问
deque与vector的区别:
vector 对于头部的插入删除效率低,数据量越大,效率越低
deque 相对于而言,对头部插入删除速度比vector快
vector访问元素时速度比deque快,这和两者内部实现相关
比vector容器多push_front()和pop_front()
内部有一个中控器,维护每段缓冲区内容,存放真实数据
构造函数与vector容器大致相同
例子:
#include <iostream> using namespace std; #include <deque> void PrintDeque(const deque<int>& d) //改为只读状态加const { //迭代器也要改为只读,此时引用的d的内存位置及对应的数据无法更改 for(deque<int>::const_iterator it = d.begin();it!=d.end();it++) { //*it= 20; 错误的此时无法更改位置 cout<<(*it)<<" "; } cout<<endl; } void test01() { deque<int> d; //1.普通赋值 for(int i=0;i<10;i++) { d.push_back(i); } PrintDeque(d); //2.区间构造 deque<int> d1(d.begin(),d.end()); PrintDeque(d1); //3.n个elem 构造 deque<int> d2(5,100); PrintDeque(d2); //4.拷贝构造 deque<int> d3(d2); PrintDeque(d3); } int main() { test01(); system("pause"); return 0; }
运行结果:
———————————————————————————————————
2.deque的赋值
和vector容器一致
例子:
#include <iostream> using namespace std; #include <deque> void PrintDeque(const deque<int>& d) //改为只读状态加const { //迭代器也要改为只读 for(deque<int>::const_iterator it = d.begin();it!=d.end();it++) { //*it= 20; 错误的此时无法更改位置 cout<<(*it)<<" "; } cout<<endl; } void test01() { deque<int> d; //1.普通赋值 for(int i=0;i<10;i++) { d.push_back(i); } PrintDeque(d); //2.operator= deque<int> d1; d1 = d; PrintDeque(d1); //3.assign 区间赋值 deque<int> d2; d2.assign(d1.begin(),d1.end()); PrintDeque(d2); //4.assign n个elem deque<int> d3; d3.assign(5,100); PrintDeque(d3); } int main() { test01(); system("pause"); return 0; }
运行结果:
———————————————————————————————————
3.deque 容量大小
大致与vector相同,就是没有容量的概念
例子:
#include <iostream> using namespace std; #include <deque> void PrintDeque(const deque<int>& d) //改为只读状态加const { //迭代器也要改为只读,此时引用的d的内存位置及对应的数据无法更改 for(deque<int>::const_iterator it = d.begin();it!=d.end();it++) { //*it= 20; 错误的此时无法更改位置 cout<<(*it)<<" "; } cout<<endl; } void test01() { deque<int> d; for(int i=0;i<10;i++) { d.push_back(i); } PrintDeque(d); if(d.empty()) { cout<<"容器为空"<<endl; } else { cout<<"容器不为空"<<endl; cout<<"大小为:"<<d.size()<<endl;//无容量概念 } d.resize(15,100); //多出来部分用1000代替 PrintDeque(d); d.resize(5);//删除对应缺少的位置 PrintDeque(d); } int main() { test01(); system("pause"); return 0; }
运行结果:
———————————————————————————————————
4.deque 的插入与删除
大致也与vector相同
多出来 v.push_front(), v.pop_front(), v.insert(v.begin(),v1.begin().v1.end()
)
例子:
#include <iostream> using namespace std; #include <deque> void PrintDeque(const deque<int>& d) //改为只读状态加const { //迭代器也要改为只读,此时引用的d的内存位置及对应的数据无法更改 for(deque<int>::const_iterator it = d.begin();it!=d.end();it++) { //*it= 20; 错误的此时无法更改位置 cout<<(*it)<<" "; } cout<<endl; } void test01() { deque<int> d; d.push_back(20); //最后加20 d.push_front(100);//第一个位置加100 d.pop_front(); //删除第一个位置数 PrintDeque(d); deque<int> d1; d1.insert(d1.begin(),d.begin(),d.end()); //在d1的第一个位置插入d容器中所有数 PrintDeque(d1); } int main() { test01(); system("pause"); return 0; }
运行结果:
———————————————————————————————————
5.deque 的数据存取
大致与vector相同
———————————————————————————————————
6.deque 算法排序
包含头文件#include < algorithm >
sort(v.begin(),v.end()) //进行升序排序
支持随机访问的迭代器的容器,都可以用sort排序
例子:
#include <iostream> using namespace std; #include <algorithm> //算法头文件 #include <deque> void PrintDeque(const deque<int>& d) //改为只读状态加const { //迭代器也要改为只读,此时引用的d的内存位置及对应的数据无法更改 for(deque<int>::const_iterator it = d.begin();it!=d.end();it++) { //*it= 20; 错误的此时无法更改位置 cout<<(*it)<<" "; } cout<<endl; } void test01() { deque<int> d; d.push_back(100); d.push_back(10); d.push_back(20); d.push_front(50); d.push_front(60); d.push_front(70); //进行填入无序的数据 cout<<"原先的数据:"<<endl; PrintDeque(d); sort(d.begin(),d.end()); //进行升序排序 cout<<"排序过后:"<<endl; PrintDeque(d); } int main() { test01(); system("pause"); return 0; }
运行结果: