STL——容器(deque) 元素的存取&迭代器

Posted coocochoco

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL——容器(deque) 元素的存取&迭代器相关的知识,希望对你有一定的参考价值。

1. deque 的数据存取

  这个部分和 vector 几乎一样

  • 第一  使用下标操作 dequeName[0] = 100;    //小心越界
  • 第二  使用at 方法 如: dequeName.at(2) = 100;  //小心越界

  •  第三  接口返回的引用 dequeName.front() 和 deqIntA.back()

如下代码:

 1 #include <iostream>
 2 #include <deque>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     deque<int> deqInt_A;
 9 
10     deqInt_A.push_back(1);
11     deqInt_A.push_back(2);
12     deqInt_A.push_back(3);
13     cout << "deqInt_A 初始的元素:" << endl;
14     for (unsigned int i = 0; i < deqInt_A.size(); i++)
15     {
16         cout << deqInt_A[i] << endl;
17     }
18 
19     deqInt_A.at(0) = 666;
20     deqInt_A[1] = 888;
21     cout << "用 .at 和下标操作符进行修改后 deqInt_A 中的元素:" << endl;
22     for (unsigned int i = 0; i < deqInt_A.size(); i++)
23     {
24         cout << deqInt_A[i] << endl;
25     }
26 
27     return 0;
28 }

打印结果:

技术图片

 

 也可以对普通变量进行赋值,如下代码:

 1 #include <iostream>
 2 #include <deque>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     deque<int> deqInt_A;
 9 
10     deqInt_A.push_back(1);
11     deqInt_A.push_back(2);
12     deqInt_A.push_back(3);
13 
14     //可以给普通变量赋值,这种方式可行,但比较危险,因为参数超出会导致访问越界
15     cout << "使用不建议的方式读容器 deque 里的值" << endl;
16     int INT_1 = deqInt_A.at(0);
17     printf("INT_1 = %d
", INT_1);
18     int INT_2 = deqInt_A[1];
19     printf("INT_2 = %d
", INT_2);
20 
21     //建议用frout() back()进行访问(包括上边的例子也是)
22     cout << "使用 frout() back() 的方式读容器 deque 里的值" << endl;
23     int INT_3 = deqInt_A.front();        //frout返回首元素的引用
24     printf("INT_3 = %d
", INT_3);
25     int INT_4 = deqInt_A.back();        //back 返回尾元素的引用
26     printf("INT_4 = %d
", INT_4);
27     
28     //遍历容器
29     cout << "遍历容器:" << endl;
30     for (int i = 0; i < deqInt_A.size(); i++)
31     {
32         cout << deqInt_A[i] << endl;
33     }
34 
35     //将值赋值回首位元素的引用
36     cout << "将收尾的值各加 1 用首位元素的引用赋值回去" << endl;
37     INT_3++;
38     INT_4++;
39     deqInt_A.front() = INT_3;
40     deqInt_A.back() = INT_4;
41     for (int i = 0; i < deqInt_A.size(); i++)
42     {
43         cout << deqInt_A[i] << endl;
44     }
45 
46     return 0;
47 }

 打印结果:

技术图片

 

 

 

 

 

2. deque 与迭代器

  • deque.begin();  //返回容器中第一个元素的迭代器。

  •  deque.end();   //返回容器中最后一个元素之后的迭代器。

  •  deque.rbegin();  //返回容器中倒数第一个元素的迭代器。

  •  deque.rend();   //返回容器中倒数最后一个元素之后的迭代器。

  •  deque.cbegin();  //返回容器中第一个元素的常量迭代器。

  •  deque.cend();   //返回容器中最后一个元素之后的常量迭代器。

 看如下代码示例:

 1 #include <iostream>
 2 #include <deque>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int test[] = { 111,222,333,444 };
 9     deque<int> deqInt_A(test, test + 4);
10 
11     //deque.begin()
12     cout << "使用迭代器 begin() 遍历容器" << endl;
13     deque<int>::iterator it_begin = deqInt_A.begin();            //获得容器中第一个元素的地址
14     for (; it_begin != deqInt_A.end(); it_begin++)
15     {
16         (*it_begin)++;        //普通的 begin() 迭代器读到的值是可以修改的
17         cout << *it_begin <<" ";
18     }
19 
20     //deque.rbegin()
21     cout << "

使用迭代器 rbegin() 遍历容器" << endl;
22     deque<int>::reverse_iterator it_rbegin = deqInt_A.rbegin();        //注意迭代器类型是 reverse_iterator,deqInt_A.rbegin()返回的是末尾地址
23     for (; it_rbegin!=deqInt_A.rend(); it_rbegin++)                    //reverse_iterator类型++ 是像首地址移动,deqInt_A.rend()返回的是首地址
24     {
25         (*it_rbegin)--;        // rbegin() 迭代器读到的值是可以修改的
26         cout << *it_rbegin << " ";
27     }
28 
29     //deque.cbegin()
30     cout << "

使用迭代器 cbegin() 遍历容器" << endl;
31     deque<int>::const_iterator it_cbegin = deqInt_A.cbegin();        //注意迭代器类型是 const_iterator
32     for (;  it_cbegin!=deqInt_A.cend(); it_cbegin++)
33     {
34         //(*it_begin)++;        //因为是 cbegin() 读取到的内容不能修改
35         cout << *it_cbegin << " ";
36     }
37 
38     return 0;
39 }

打印内容:

 技术图片

 

 

 

 

 

 

 

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

以上是关于STL——容器(deque) 元素的存取&迭代器的主要内容,如果未能解决你的问题,请参考以下文章

C++提高编程STL-deque容器

C++ STL 之 deque

stl之deque双端队列容器

SGI-STL简记-序列容器(deque)

STL容器:deque双端队列学习

STL—deque使用及源码剖析