[翻译] C++ STL容器参考手册(第一章 <array>)
本章节原文:http://www.cplusplus.com/reference/array/array/
1. std::array (C++11支持)
template < class T, size_t N > class array;
数组类
数组容器是固定长度的序列容器:按照严格的线性顺序,存储一定数量的元素。
数组容器内部并不维护除了元素本身之外的任何数据(甚至不保存自己的size,这是一个编译时就确定的模板参数)。数组容器对存储空间的利用效率和普通数组一样高。数组类仅仅在数组之外增加了一些成员以及全局函数,使得这些数组能够被当作一个标准容器来使用。
与其他的标准容器不同的是,数组容器具有固定的大小,并且不使用allocator来管理对元素内存空间的分配,数组容器集合了各样的成员并且封装了一个固定长度的数组。因此数组容器不能够被动态的扩展或者截断(参考vector,这是一个能够被扩展的相似的容器)。
定义长度为0的数组容器是合法的,但是不能对它解引用*(成员front,back,以及data)。
*译者:解引用是引用的反向操作,如下例:
int a=;
int* pa=&a; //此处的&a是引用操作
*pa=; //此处的*pa是解引用操作
与标准库中得其它容器不同的还有,交换*两个数组容器的操作涉及到逐个交换容器中每一个元素,通常情况下这是一个非常低效的操作。从另一方面来讲,这样的实现使得他们的迭代器始终保持着与原容器的关联。
*译者:交换操作是数组容器提供的一个方法(函数),通过这个方法可以交换两个数组容器内的元素,见swap。
数组容器另外一个独特的特性是它可以被当做一个tuple对象来操作:<array>头文件中重载了get函数,通过它可以像tuple一样来访问数组容器的元素,同样的也可以使用tuple_size以及tuple_element来获取数组容器的大小与元素类型。
2. 容器属性
- 序列
- 序列容器中的元素是按照严格的线性顺序来存储的。访问每一个元素时,都是通过这个元素在序列中所处的位置来访问的。
- 连续的存储空间
- 序列容器中的元素是存储在一片连续的内存空间中,因此随机访问任意元素的时间都是相同的。指向一个元素的指针可以通过偏移地址来访问其它元素。
- 固定长度
- 容器使用构造器与析构器来静态分配所需要的空间。容器的大小在编译时就已经确定。(运行时)没有(额外的)空间或时间上的开销。
3. 模板参数
- 参数T
- 容器所包含元素的类型。与类成员array::value_type是一致的。
- 参数N
- 数组容器的大小,表示元素的数量。
- 在array成员函数的参考或说明中,这些参数名默认作为模板参数*。
- *译者:比如说这里template < class T, size_t N > class array;
4. 成员类型
- 以下的这些别名都是array的成员类型。他们被广泛的用作参数类型和成员函数返回值的类型。
| member type | definition | notes |
|---|---|---|
| value_type | The first template parameter (T) | |
| reference | value_type& | |
| const_reference | const value_type& | |
| pointer | value_type* | |
| const_pointer | const value_type* | |
| iterator | a random access iterator to value_type | convertible to const_iterator |
| const_iterator | a random access iterator to const value_type | |
| reverse_iterator | reverse_iterator<iterator> | |
| const_reverse_iterator | reverse_iterator<const_iterator> | |
| size_type | size_t | unsigned integral type |
| difference_type | ptrdiff_t | signed integral type |
5. 成员函数
迭代器
- begin
- 返回指向容器最前端的迭代器 (公有成员函数)
- end
- 返回指向容器最后端的迭代器 (公有成员函数)
- rbegin
- 返回指向容器最后端的反向迭代器 (公有成员函数)
- rend
- 返回指向容器最前端的反向迭代器 (公有成员函数)
- cbegin
- 返回指向容器最前端的只读迭代器 (公有成员函数)
- cend
- 返回指向容器最后端的只读迭代器 (公有成员函数)
- crbegin
- 返回指向容器最后端的反向只读迭代器 (公有成员函数)
- crend
- 返回指向容器最前端的反向只读迭代器 (公有成员函数)
- *译者:这里的“最前端”与“最后端”分别指容器中第一个元素与容器中最后一个元素。只读迭代器本身可以进行增减操作,但是使用只读迭代器指向的元素是只读的。
容量
- size
- 返回元素的数量 (公有成员函数)
- max_size
- 返回容器最多能够存储的元素数量 (公有成员函数)
- empty
- 测试数组容器是否为空 (公有成员函数)
元素的访问
- operator[]
- 访问元素 (公有成员函数)
- at
- 访问元素 (公有成员函数)
- front
- 访问第一个元素 (公有成员函数)
- back
- 访问最后一个元素 (公有成员函数)
- data
- 返回指向数据的指针* (公有成员函数)
- *译者:data返回的指针其实就是指向第一个元素的指针。
修改器
- fill
- 使用某个值填充整个容器 (公有成员函数)
- swap
- 交换容器的内容 (公有成员函数)
6. 重载的非成员函数
- get (array)
- 获取元素(元组接口)(模板函数)
数组容器的关系运算符(模板函数)
7. 特化非成员类
数组类型的元组元素(类模板的特化)
数组类型的元组长度特性(类模板的特化)
[翻译] C++ STL容器参考手册(第一章 <array>)的更多相关文章
- [翻译] C++ STL容器参考手册 (总册)
1. 写在最前面 这将是博主的第一篇技术博客,思考再三决定从翻译开始.这将是一个系列的博客,由不同的章节组成,章节之间由超链接联系,开发过程将使用增量式开发,每次完成一个章节.本篇是本系列的总册,提供 ...
- [翻译] C++ STL容器参考手册(第二章 <deque>)
返回总册 本章节原文:http://www.cplusplus.com/reference/deque/deque/ 1. std::deque template < class T, clas ...
- [书籍翻译] 《JavaScript并发编程》第一章 JavaScript并发简介
> 本文是我翻译<JavaScript Concurrency>书籍的第一章,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并 ...
- Linux/Unix系统编程手册 第一章:历史和标准
Unix的开发不受控于某一个厂商或者组织,是由诸多商业和非商业团体共同贡献进行演化的.这导致两个结果:一是Unix集多种特性于一身,二是由于参与者众多,随着时间推移,Unix实现方式逐渐趋于分裂. 由 ...
- 【翻译】Express web应用开发 第一章
本章节是一个对初学者友好的Express介绍.你将学习到Express的基础知识.核心概念和实现一个Express应用的组成部分.现阶段我们不需要做太多的编码,本章节会让你熟悉和习惯Express,为 ...
- Oauth2手册 第一章
来源:https://github.com/jeansfish/RFC6749.zh-cn/blob/master/SUMMARY.md 1. 简介在传统的客户端-服务器身份验证模式中,客户端请求服务 ...
- essential c++ 第一章 array及vector相关使用
将对象初始化: 1.用等号(=)赋值运算符初始化,针对对象是内置类型或者对象可以单一值初始化 2.构造函数初始化,针对对象需要多个初始值的情况 单括号括住的字符表示字符常量(‘ ’): 第一个反斜线表 ...
- Lua 5.2 中文参考手册
闲来无事,发现Lua更新到了5.2.2,参考手册也更到了5.2,在网上发现只有云风翻译的5.1版,花了几天时间翻译了一些. 参考手册有点长,又要随时修改,所以在github上建了项目,有需要的朋友可以 ...
- Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...
随机推荐
- Linux设置自启动
启动大致过程:bootloader-->内核-->内核模块-->挂载根文件系统-->init进程 init进程是非内核进程中第一个被启动运行的,因此它的进程编号PID的值总是1 ...
- DOM 节点属性
DOM 节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeT ...
- dedecms友情链接flink的调用方法
标记名称:flink[标签简介][功能说明]:用于获取友情链接,其对应后台文件为"includetaglibflink.lib.php".[适用范围]:全局标记,适用V55,V56 ...
- 优化PHP代码的40条建议(转载)
[size=5][color=Red](译文)优化PHP代码的40条建议[/color][/size] 40 Tips for optimizing your php Code 原文地址:http:/ ...
- ORA-16014报错解决
今天在本地数据库操作的时候报错: SQL> alter database open;alter database open*第 1 行出现错误:ORA-16014: 日志 3 的序列号 55 未 ...
- 开发反模式(GUID) - 伪键洁癖
一.目标:整理数据 有的人有强迫症,他们会为一系列数据的断档而抓狂. 一方面,Id为3这一行确实发生过一些事情,为什么这个查询不返回Id为3的这一行?这条记录数据丢失了吗?那个Column到底是什么? ...
- Linux上ld和ld.so命令的区别
显然,ld链接器,它的生命周期是发生在compile-time的,它的一些参数是编译时期gcc给传递的,比如,指定需要链接什么库. ld.so命令的周期是发生在run-time的,名字叫动态链接器/加 ...
- awk详解
一.简介 强大的文本分析工具,基于指定规则浏览和抽取信息.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理.awk有3个不同版本: awk.nawk和ga ...
- C++指针初始化总结
1.字符指针的初始化 在c语言中 "string"保存的就是首个字符所在的地址 所以可以把 字符串常量"string" 赋值给指针 char *p; &qu ...
- 异步化DAO的设计和实践
目前,公司技术规划要求未来所有的服务要全面实现异步化接口,使得每个服务能达到1万/秒的单机性能.我们知道,在一个服务请求中,可能会调用其他服务,还会使用memcache.kv以及mysql等.目前,大 ...