C++容易忘的知识点——array和deque(五)
2017-10-06 10:38
141 查看
容器array
array是固定大小的顺序容器,类似于一般的数组。它存储在连续的内存,并且大小不可以改变,即允许修改元素的值,但是不能插入和删除元素。array的初始化和成员函数
其他与array有关的类、函数和操作
array支持关系操作符==,!=,<,<=,>,>=。//1.tuple_element类 获取array中第几个元素的值 bd49 //具体用法 int main(){ array<int, 5 > a = { 1,2,3,4 }; tuple_element<0, array<int, 5>>::type inval= a.front(); cout << inval << endl; return 0; }
//2.tuple_size类 获取array数组的大小 int main() { array<int, 5 > a = { 1,2,3,4,5 }; cout << tuple_size<array<int, 5>>::value << endl; system("pause"); return 0; }
//3.get函数 返回array[id]的值 int main() { array<int, 5 > a = { 10,11,12,13 }; cout << std::get<1>(a) << endl; return 0; }
deque容器
deque是双端队列,可以向两端发展,因此在头尾两端添加和删除元素都十分迅速。同时它也支持随机访问任一元素。deque是由若干连续空间串接而成,deque的最大任务,就是在这些分段连续的空间上维护其整体连续的假象,并提供随机存取的接口。它的原理详见下面的连接deque内部实现原理,我们从下面的程序也可以看出这一点。
deque<int> deq; for (int i = 0;i < 10;i++){ deq.push_back(10); //在deq的尾部添加 deq.push_front(1); //在deq的头部添加 } for (int i = 0;i < 20;i++) { cout << deq.at(i) << " "; cout << &deq[i] << endl; } system("pause"); return 0;
这里可以看出deque是一些独立的区块组成的,当我们用at或[]来输出时,给人感觉上是连续的。deque在一个映射结构中保存这些块以及顺序的跟踪。
deque的初始化和成员函数
deque的迭代器失效
在deque容器首部或者尾部插入元素不会使得任何迭代器失效。.在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。
在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。
deque的特点
随机访问,在头尾两端插入和删除方便。但是占用内存多,主要是由于deque要处理内存块的跳转,需要保留空间。迭代器需要在不同区块间跳转,所以必须是特殊的智能型指针,非一般指针。
任何插入或删除动作都会使所有指向deque元素的指针、引用和迭代器失效,唯一例外的是在头部或尾部插入元素(此时指针和引用仍然有效,但迭代器失效)。
deque的内存区块不再被使用时,会被释放。deque的内存大小是可缩减的。
相关文章推荐
- C++不得不知道的几点容易出错的知识点--1
- C/C++容易混淆的小知识点
- c/c++一些容易遗忘的知识点(不断补充)
- C++一些容易忽略的知识点
- C++基础知识容易忽略的知识点
- 细说C++中那些容易忽略而又非常重要的知识点
- C++中容易忘的知识点——list和forward_list(四)
- C/C++知识点(容易出错的地方)
- C++中容易忘记的知识点——vector和string(三)
- C++中容易考的知识点总结——类(二)
- c++面试知识点
- 【C++】【LeetCode】26. Remove Duplicates from Sorted Array
- 【LeetCode算法练习(C++)】Search in Rotated Sorted Array
- C++顺序容器vector、deque、list
- 【c++程序】deque一般用法
- C++常见知识点复习-赋值构造函数
- LeetCode刷题(C++)——Remove Duplicates from Sorted Array(Easy)
- C++ STL容器之 deque
- C++知识点摘记(二)
- 【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意