无人问津的日子,我为自己喝彩!
vector
区别vector
对于头部的插入删除效率低,数据量越大,效率越低deque
相对而言,对头部的插入删除速度会比vector快vector
访问元素的速度会deque
快,这和两者内部实现有关deque
内部有一个中控器,维护每段缓冲区中的内容,缓冲区中存放真实的数据deque
时像一片连续的内存空间deque
容器的迭代器也是支持随机访问的deque deqT;
默认构造形式deque(beg, end);
构造函数将[beg, end)区间元素拷贝给本身deque(n, elem);
构造函数将n个elem拷贝给本身deque(const deque &deq);
拷贝构造函数#include
#include
#include
using namespace std;void printDeque(const deque d) { //遍历打印输出for (deque::const_iterator it = d.begin(); it != d.end(); it++) {cout << (*it) << " ";}cout << endl;
}
void text01() {deque d1;for (int i = 0; i < 10; i++) {d1.push_back(i);}cout << "d1=";printDeque(d1);//构造函数将d1元素拷贝给d2dequed2(d1.begin(),d1.end());cout << "d2=";printDeque(d2);dequed3(10, 3);cout << "d3=";printDeque(d3);dequed4(d3);cout << "d4=";printDeque(d4);}int main() {text01();return 0;
}
我们知道,迭代器可以对容器中的数据进行读写操作,通过迭代器it我们可以读取容器中的元素,但可能不经意之间也会对其修改。但如何才能只读取并避免进行修改呢???
当我们把迭代器改为只读迭代器时,发现不再报错了欸
当我们尝试用迭代器对数据进行修改时,发现报错了——表达式必须是可修改的左值,也就是该迭代器访问数据时,只能读取,不能修改,我们的目的达到了!!
鉴于
deque
与vector
的赋值操作基本类似,本篇就不详细讲了,带着大家敲击行代码就好了,详细内容请见👉👉👉 Day07 C++STL入门基础知识四——vector容器(上) 基本概念-构造函数-赋值操作-容量大小【全面深度剖析+例题代码展示】eiO
deque& operator=(const deque &deq);
重载等号操作符assign(beg, end);
将[beg, end)区间中的数据拷贝赋值给本身assign(n, elem);
将n个elem拷贝赋值给本身#include
#include
#include
using namespace std;void printDeque(const deque d) { //遍历打印输出for (deque::const_iterator it = d.begin(); it != d.end(); it++) {cout << (*it) << " ";}cout << endl;
}
void text02() {dequed1;for (int i = 0; i < 10; i++) {d1.push_back(i);}//=赋值dequed2;d2 = d1;cout << "d2=";printDeque(d2);//assign赋值dequed3;d3.assign(d1.begin() + 2, d1.end());cout << "d3=";printDeque(d3);//n个ele赋值dequed4;d4.assign(10, 4);cout << "d4=";printDeque(d4);}int main() {//text01();text02();return 0;
}
deque.empty();
判断容器是否为空 size()
返回容器元素中的个数resize(int num);
重新指定容器的长度为num 与
vecor
不同,deque
是双端数组,所以可以在头尾两端无限插入读取数据,所以就没有固定的容量
#include
#include
#include
using namespace std;void printDeque(const deque d) { //遍历打印输出for (deque::const_iterator it = d.begin(); it != d.end(); it++) {cout << (*it) << " ";}cout << endl;
}
//deque容器大小操作
void text03() {deque d1;for (int i = 0; i < 10; i++) {d1.push_back(i);}printDeque(d1);//判空if (d1.empty())cout << "d1为空" << endl;elsecout << "d1为非空" << endl;//大小int size = d1.size();cout << "d1的大小为:" << size << endl;//重新指定大小【扩大】d1.resize(15);cout << "个数扩大为15时:";printDeque(d1);//重载指定大小d1.resize(20, 123);cout << "重载扩大为20时:";printDeque(d1);//重新指定大小【缩小】d1.resize(8);cout << "缩小为8时:";printDeque(d1);
}int main() {//text01();//text02();text03();return 0;
}
push_back(elem)
在容器尾部添加一个数据push_front(elem);
在容器头部插入一个数据pop_back();
删除容器最后一个数据pop_front();
删除容器第一个数据#include
#include
#include
using namespace std;void printDeque(const deque d) { //遍历打印输出for (deque::const_iterator it = d.begin(); it != d.end(); it++) {cout << (*it) << " ";}cout << endl;
}
void text04() {dequed1;//尾插d1.push_back(10);d1.push_back(20);d1.push_back(30); printDeque(d1); //10 20 30//头插d1.push_front(5);d1.push_front(0);printDeque(d1); //0 5 10 20 30 //尾删d1.pop_back(); printDeque(d1); // 0 5 10 20 //头删d1.pop_front();printDeque(d1); //5 10 20
}int main(){text04();return 0;
}
insert(pos,elem);
在pos位置插入一个elem元素拷贝,返回新数据的位置insert(pos, n, elem);
在pos位置插入n个elem数据,无返回值insert(pos, beg, end);
在pos位置插入[beg, end)区间的数据,无返回值#include
#include
#include
using namespace std;void printDeque(const deque d) { //遍历打印输出for (deque::const_iterator it = d.begin(); it != d.end(); it++) {cout << (*it) << " ";}cout << endl;
}
void text05() {deque d1;d1.push_back(10);d1.push_back(20);d1.push_front(100);d1.push_front(200);printDeque(d1);//200 100 20 10//insert插入d1.insert(d1.begin(), 400);printDeque(d1);//insert重载d1.insert(d1.begin(), 2, 600);printDeque(d1);//insert区间插入dequed2;d2.push_back(1);d2.push_back(2);d2.push_back(3);d1.insert(d1.begin(), d2.begin(), d2.end());printDeque(d1);}
int main(){text05();return 0;
}
clear();
清空容器所有数据erase(beg, end);
删除[beg,end)区间的数据,返回下一个数据的位置erase(pos);
删除pos位置的数据,返回下一个数据的位置#include
#include
#include
using namespace std;void printDeque(const deque d) { //遍历打印输出for (deque::const_iterator it = d.begin(); it != d.end(); it++) {cout << (*it) << " ";}cout << endl;
}
//删除
void text06() {deque d1;for (int i = 0; i < 10; i++) {d1.push_back(i);}printDeque(d1);//头尾删d1.pop_front();printDeque(d1);d1.pop_back();printDeque(d1);//迭代器删除指定位置 it+=posdeque::iterator it = d1.begin();it++;d1.erase(it);printDeque(d1);//按照区间的方式删除d1.erase(it , d1.end()-2);printDeque(d1);//清空cout << "使用clear()清空为:";d1.clear();printDeque(d1);for (int i = 0; i < 10; i++) {d1.push_back(i);}printDeque(d1);d1.erase(d1.begin(), d1.end());cout << "使用erase()清空为:";printDeque(d1);
}int main(){text06();return 0;
}
at(int idx);
返回索引idx所指的元素operator[ ];
返回索引idx所指的数据front();
返回容器中第一个数据元素back();
返回容器中最后一个数据元素#include
#include
#include
using namespace std;void printDeque(const deque d) { //遍历打印输出for (deque::const_iterator it = d.begin(); it != d.end(); it++) {cout << (*it) << " ";}cout << endl;
}
//数据存取
void text07() {dequed1;for (int i = 0; i < 10; i++) {d1.push_back(i);}d1.push_back(20);d1.push_back(30);d1.push_front(100);d1.push_front(200);int len = d1.size();//通过[ ]访问for (int i = 0; i < len; i++) {cout << d1[i] << " ";}cout << endl;//通过at方式访问for (int i = 0; i < len; i++) {cout << d1.at(i) << " ";}cout << endl;//访问头尾元素cout << "头元素为:" << d1.front() << endl;cout << "尾元素为:" << d1.back() << endl;}
int main(){text07();return 0;
}
sort(iterator beg, iterator end);
对beg和end区间元素进行排序#include
#include
#include
#include
#include
using namespace std;void printDeque(const deque d) { //遍历打印输出for (deque::const_iterator it = d.begin(); it != d.end(); it++) {cout << (*it) << " ";}cout << endl;
}
void text08() {deque d1;d1.push_back(100);d1.push_back(60);d1.push_back(90);d1.push_front(200);d1.push_front(10);d1.push_front(300);cout << "排序前:";printDeque(d1);//排序deque::iterator it = d1.begin();int size = d1.size();sort(it, it + size);//或者sort(d1.begin(),d1.end());cout << "排序后:";printDeque(d1);
}
int main(){text08();return 0;
}
上一篇:C++ 模板
下一篇:【Maven】聚合与继承