deque
2021-08-08 本文已影响0人
Sheik
环境:ide:Mac+clion
视频链接:
https://www.bilibili.com/video/BV1Hb411Y7E5?p=5
deque 双端数组,可以对头端进行插入和删除。可以称为队列。可以理解为它的实现都是由多个内存混充区组成,所以访问速度较慢。vector 访问元素非常快,deque 在插入前端数据比价快。 因为vector的实现,支持后端操作。所以要进行数据移动。
//如果不想函数体内部修改deque的值,那么就需要加入const,如果参数加了const,那么迭代器也要加入const_iterator
void printDeque(const deque<int> &d){
for (deque<int>::const_iterator it=d.begin();it!= d.end();it++){
cout << *it << " ";
}
cout << endl;
}
void test(){
deque<int> deque1;//默认构造
for (int i=0;i<10;i++){
deque1.push_back(i);
}
printDeque(deque1);
deque<int> deque2(deque1);//copy构造函数
printDeque(deque2);
deque<int> deque3(5,100);//申请5个位置用100进行初始化。
printDeque(deque3);
deque<int> deque4(deque1.begin(),deque1.end());//用deque1的数据进行初始化
printDeque(deque4);
};
deque 赋值和vector 一样,重载了operator= 和assign 的两种方式。
deque 大小操作,基本和vector 一致,只是没有容量概念。判断是否为空用empty ,大小size,调整大小用resize.
deque 的插入和删除的操作:
void test1(){
deque<int> deque1;//默认构造
for (int i=10;i<20;i++){
deque1.push_back(i);//尾插法
}
for (int i=9;i>=0;i--){
deque1.push_front(i);//头插法
}
printDeque(deque1);
//删除:
deque1.pop_back();
printDeque(deque1);//尾删法
deque1.pop_front();//头删法
printDeque(deque1);
deque1.insert(deque1.begin(),2,666);
printDeque(deque1);
deque<int> deque2;//默认构造
deque2.push_back(888);
deque2.push_back(889);
deque1.insert(deque1.end(),deque2.begin(),deque2.end());//按照区间进行插入。
printDeque(deque1);
deque1.erase(deque1.begin());
printDeque(deque1);
deque1.clear();//清空数据。
printDeque(deque1);
};
deque访问方式,也有[] 和iterator 以及at的方式。头尾元素依然是front 和back。
deque sort 排序。
void test2(){
deque<int> deque1;//默认构造
for (int i=10;i<20;i++){
deque1.push_back(i);//尾插法
}
for (int i=0;i<10;i++){
deque1.push_front(i);//头插法
}
printDeque(deque1);//9 8 7 6 5 4 3 2 1 0 10 11 12 13 14 15 16 17 18 19
//排序默认算法是升序
sort(deque1.begin(),deque1.end());//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
printDeque(deque1);
vector<int> v1;
for (int i=10;i<20;i++){
v1.push_back(i);//尾插法
}
v1.push_back(1);//尾插法
for (vector<int>::const_iterator it=v1.begin();it!= v1.end();it++){
cout << *it << " ";//110 11 12 13 14 15 16 17 18 19 1
}
cout << endl;
sort(v1.begin(),v1.end());
for (vector<int>::const_iterator it=v1.begin();it!= v1.end();it++){
cout << *it << " ";//1 10 11 12 13 14 15 16 17 18 19
}
cout << endl;
};