Fork me on GitHub

STL——容器(deque) 构造 & 头尾添加删除元素

 1.deque容器概念

deque是“double-ended queue”的缩写,和vector一样都是STL的容器,唯一不同的是:deque是双端数组,而vector是单端的。

 

Deque 特点:

  • deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
  • deque可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法)
  • deque头部和尾部添加或移除元素都非常快速, 但是在中部安插元素或移除元素比较费时。

使用时,包含头文件:#include <deque> 

 

 

 

2. deque 的无参构造与有参构造

  deque 的用法与 vector 类似,无参构造时不会分配内存,可以用过 push_back() 在后方添加元素,可以通过迭代器或指定参数对 deque 的空间进行赋值

 1 #include <iostream>
 2 #include <deque>
 3 
 4 using namespace std;
 5 
 6 class student
 7 {
 8 public:
 9     student(int age)
10     {
11         this->age = age;
12         cout << "调用构造函数" << endl;
13     }
14     int age;
15 };
16 
17 
18 int main()
19 {
20     //无参构造,这样的 deque 没有分配内存
21     deque<int> deqInt;            
22     deque<float> deqFloat;
23     deque<student> deqStu;
24     deque<student*> deqStuP;
25 
26     deqInt.push_back(111);        //deqInt 尾部插入1个元素
27     deqInt.push_back(222);        //deqInt 尾部插入1个元素
28     deqInt.push_back(333);        //deqInt 尾部插入1个元素
29     deqFloat.push_back(0.1f);
30     deqStu.push_back(student(18));
31 
32     //带参构造
33     //方式一:用迭代器给定区间
34     deque<int> deqInt_A(deqInt.begin(),deqInt.end());
35     cout << "deqInt_A 中的元素为:" << endl;
36     for (int i = 0; i < deqInt_A.size(); i++)
37     {
38         cout << deqInt_A[i] << endl;
39     }
40 
41     //方式二:指定n个元素进行拷贝 10 个 0
42     deque<int> deqInt_B(5, 0);
43     cout << "deqInt_B 中的元素为:" << endl;
44     for (int i = 0; i < deqInt_B.size(); i++)
45     {
46         cout << deqInt_B[i] << endl;
47     }
48 
49     //方式三:拷贝构造
50     deque<int> deqInt_C(deqInt_B);
51 
52     cout << "dequeInt_C 中的元素为:" << endl;
53     for (int i = 0; i < deqInt_C.size(); i++)
54     {
55         cout << deqInt_C[i] << endl;
56     }
57 
58     return 0;
59 }

打印结果:

 

 

 

3. deque 的两端删除与插入,(头部插入和删除操作,是比 vector 多出来的功能)

 1 #include <iostream>
 2 #include <deque>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int Test[] = { 111,222 };
 9     deque<int> deqInt_A(Test, Test + 2);
10     cout << "初始 deqInt_A 中的元素为:" << endl;
11     for (int i = 0; i < deqInt_A.size(); i++)
12     {
13         cout << deqInt_A[i] << endl;
14     }
15 
16     printf("==================================\n");
17     //deque.push_back 尾部添加
18     cout << "使用 push_back 在尾部添加 333" << endl;
19     deqInt_A.push_back(333);
20     cout << "对 deqInt_A 进行遍历:" << endl;
21     for (int i = 0; i < deqInt_A.size(); i++)
22     {
23         cout << deqInt_A[i] << endl;
24     }
25 
26     printf("==================================\n");
27     //deque.push_front 头部添加, 这个是比 vector 多出来的功能 容器的头部操作
28     cout << "使用 push_front 在头部添加 0" << endl;
29     deqInt_A.push_front(0);
30     cout << "对 deqInt_A 进行遍历:" << endl;
31     for (int i = 0; i < deqInt_A.size(); i++)
32     {
33         cout << deqInt_A[i] << endl;
34     }
35 
36     printf("==================================\n");
37     //deque.pop_back 尾部删除
38     cout << "使用 pop_back 尾部删除" << endl;
39     deqInt_A.pop_back();
40     cout << "对 deqInt_A 进行遍历:" << endl;
41     for (int i = 0; i < deqInt_A.size(); i++)
42     {
43         cout << deqInt_A[i] << endl;
44     }
45 
46     printf("==================================\n");
47     //deque.pop_front 头部删除, 这个是比 vector 多出来的功能 容器的头部操作
48     cout << "使用 pop_front 头部删除 " << endl;
49     deqInt_A.pop_front();
50     cout << "对 deqInt_A 进行遍历:" << endl;
51     for (int i = 0; i < deqInt_A.size(); i++)
52     {
53         cout << deqInt_A[i] << endl;
54     }
55 
56     return 0;
57 }

打印结果:

 

 

 

 

 

 

 

 

 

 

========================================================================================================================

posted @ 2020-04-28 02:57  索智源  阅读(796)  评论(0编辑  收藏  举报