C++容易忘的知识点——array和deque(五)
来源:互联网 发布:数据库图片的类型 编辑:程序博客网 时间:2024/06/05 16:52
容器array
array是固定大小的顺序容器,类似于一般的数组。它存储在连续的内存,并且大小不可以改变,即允许修改元素的值,但是不能插入和删除元素。
array的初始化和成员函数
其他与array有关的类、函数和操作
array支持关系操作符==,!=,<,<=,>,>=。
//1.tuple_element类 获取array中第几个元素的值//具体用法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的内存大小是可缩减的。
阅读全文
0 0
- C++容易忘的知识点——array和deque(五)
- C++中容易忘的知识点——list和forward_list(四)
- C++中容易忘记的知识点——vector和string(三)
- C++容易忘记的知识点——map和set(六)
- c/c++一些容易遗忘的知识点(不断补充)
- C中容易忽略的知识点
- C/C++容易混淆的小知识点
- 容器总结——array、vector、deque
- C容易忘记知识点
- C/C++编程细节(五)——重要知识点
- [c语言基础回顾]操作符和表达式中一些极其容易混淆的知识点
- Java一些容易忘的小知识点(一)
- 个人容易忘的知识点罗列(实时更新)
- [C++]vector,list和deque的区别
- C++中容易考的知识点总结——类(二)
- 容易考的知识点总结(一)
- 容易混淆的知识点
- C语言中的几个容易混淆的知识点总结
- C++ 异常处理
- JS 基础 —— ECMAScript 对象 笔记
- JAVA提高篇(6)--对象克隆(复制)
- JSP的基本动作与指令
- FFmpeg常用命令
- C++容易忘的知识点——array和deque(五)
- Java 继承
- codeforce_157c_找两串字符串相同部分
- java异常
- 第13期《各显神通》10月刊
- Codeforces 868A Bark to Unlock 水题
- genymotion安装
- 玩树莓派(一)
- netty对websocket的支持