[翻译] C++ STL容器参考手册(第一章 <array>)

返回总册

1. std::array (C++11支持)

template < class T, size_t N > class array;

数组类

数组容器是固定长度的序列容器:按照严格的线性顺序,存储一定数量的元素。

数组容器内部并不维护除了元素本身之外的任何数据(甚至不保存自己的size,这是一个编译时就确定的模板参数)。数组容器对存储空间的利用效率和普通数组一样高。数组类仅仅在数组之外增加了一些成员以及全局函数,使得这些数组能够被当作一个标准容器来使用。

与其他的标准容器不同的是,数组容器具有固定的大小,并且不使用allocator来管理对元素内存空间的分配,数组容器集合了各样的成员并且封装了一个固定长度的数组。因此数组容器不能够被动态的扩展或者截断(参考vector,这是一个能够被扩展的相似的容器)。

定义长度为0的数组容器是合法的,但是不能对它解引用*(成员frontback,以及data)。

*译者:解引用是引用的反向操作,如下例:

1 int a=0;
2 int* pa=&a;    //此处的&a是引用操作
3 *pa=100;       //此处的*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 random access iterator to value_type convertible to const_iterator
const_iterator 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
测试数组容器是否为空 (公有成员函数)
*译者:对于数组容器,size和max_size总是相同的。对于可动态增长的容器,出于时间性能的考虑,当需要扩展容器容量的时候,通常的做法是分配比实际需求更多的存储空间,这样一来就不需要在每次插入元素时都对容器扩容,在这种情况下,size代表了元素的数量,而max_size代表的是容器的容量,他们有可能不同。

元素的访问

operator[]
访问元素 (公有成员函数)
at
访问元素 (公有成员函数)
front
访问第一个元素 (公有成员函数)
back
访问最后一个元素 (公有成员函数)
data
返回指向数据的指针* (公有成员函数)
*译者:data返回的指针其实就是指向第一个元素的指针。 

修改器

fill
使用某个值填充整个容器 (公有成员函数)
swap
交换容器的内容 (公有成员函数)

6. 重载的非成员函数

get (array)
  获取元素(元组接口)(模板函数)
relational operators (array)

  数组容器的关系运算符(模板函数)

7. 特化非成员类

tuple_element<array>

  数组类型的元组元素(类模板的特化)

tuple_size<array>

  数组类型的元组长度特性(类模板的特化)

时间: 2024-10-13 11:57:16

[翻译] C++ STL容器参考手册(第一章 <array>)的相关文章

[翻译] C++ STL容器参考手册 (总册)

1. 写在最前面 这将是博主的第一篇技术博客,思考再三决定从翻译开始.这将是一个系列的博客,由不同的章节组成,章节之间由超链接联系,开发过程将使用增量式开发,每次完成一个章节.本篇是本系列的总册,提供了所有子章节的超链接,另外所有的子章节也都将提供链接返回到本篇. 2. 本系列的目录结构 总册 第一章 <array> 第二章 <deque> 第三章 <forward_list> 第四章 <list> 第五章 <map> 第六章 <queue

[翻译] C++ STL容器参考手册(第二章 &lt;deque&gt;)

返回总册 本章节原文:http://www.cplusplus.com/reference/deque/deque/ 1. std::deque template < class T, class Alloc = allocator<T> > class deque; 双端队列 deque(发音类似"deck")是对double-ended-queue比较特殊的缩写方式.deque是动态长度的序列容器,可以向任意一端扩展或者从任意一端缩短. 不同的库对deque

IIS 7开发与管理完全参考手册(第一章部分内容)

在CSAPP中看到Web Server的部分内容, 联想到经常使用IIS, 所以准备了解一点. p9~p15. IIS7特性 管道集成 IIS 7.0将ASP.NET与请求管道进行了集成, IIS 7提供了统一的事件管道, 之前有一个2种独立的管道-- IIS管道和ASP.NET管道. 为了向后兼容, IIS 7提供了Classic管道模式, 可以模拟IIS 6.0的IIS管道, 也可模拟IIS 6.0的ASP.NET管道. IIS6 请求流程 浏览器 -> (IIS管道) HTTP.SYS -

【翻译】Express web应用开发 第一章

本章节是一个对初学者友好的Express介绍.你将学习到Express的基础知识.核心概念和实现一个Express应用的组成部分.现阶段我们不需要做太多的编码,本章节会让你熟悉和习惯Express,为接下来的章节做好准备. 别跳过这一章节,这篇材料为你的Express学习之旅提供了指南. 什么是Express? Express是一个轻量.灵活.强大的NodeJS web开发框架. What do we mean by minimal yet flexible and powerful?Expre

Lush手册——第一章 简介

简介 本章将展示Lush及其能力与特性. 1.1 Lush展示 Lush是一门面向对象的编程语言,是为对大规模数值运算与图形化应用感兴趣的研究人员.实验人员和工程师设计的.Lush用于以下场景,即想要将高级的.弱类型的解释性语言的灵活性,强类型的.本地编译型的语言的高效性,还有与C.C++等语言编写的代码容易结合这些特性组合在一起. 在与解释型语言(如Python.Perl.Matlab.S+甚至BASIC)和使用编译型语言(例如C语言)结合的相关工程上,Lush的优势尤其意义重大.通过使用Lu

IIS 7开发与管理完全参考手册(第二章 IIS的发展历史)

p29~p49, 分2次看.p29~p37, p38~p49. 摘要 本章讲述了IIS的发展历程 IIS1~3几乎无变化 IIS4添加了进程隔离 IIS5提供了3种应用程序保护(单进程, 程序池, 进程隔离) IIS6增加了工作进程模式, 可以运行多个应用程序池, 引入了在内核模式运行的Http.sys IIS7将IIS管道和ASP.NET管道统一, 管道中可添加自定义组件 IIS4及以前 IIS1除了可以处理静态内容请求, 还提供了ISAPI(Internet Service Applicat

Oauth2手册 第一章

来源:https://github.com/jeansfish/RFC6749.zh-cn/blob/master/SUMMARY.md 1. 简介在传统的客户端-服务器身份验证模式中,客户端请求服务器上访问受限的资源(受保护的资源)时,需要使用资源所有者的凭据在服务器上进行身份验证. 资源所有者为了给第三方应用提供受限资源的访问权限,需要与第三方共享它的凭据.这就导致一些问题和局限: 第三方应用需要存储资源所有者的凭据以供将来使用.该凭据通常是明文密码.服务器需要支持密码身份认证,尽管密码认证

重温《STL源码剖析》笔记 第一章

源码之前,了无秘密. --侯杰 经典的书,确实每看一遍都能重新收获一遍: 第一章:STL简介 STL的设计思维:对象的耦合性极低,复用性极高,符合开发封闭原则的程序库. STL的价值:1.带给我们一套极具实用价值的零部件,以及一个整合的组织. 2.带给我们一个高层次的以泛型思维为基础的.系统化的.条理分明的“软件组件分类学”. 在STL接口之下,任何组件都有最大的独立性,并以所谓迭代器胶合起来,或以配接器互相配接,或以所 谓仿函数动态选择某种策略. STL六大组件:1.容器(containers

Objective-C高级编程:iOS多线程及内存管理(第一章翻译)

写在翻译之前:当初看到这本书的时候,感觉深入浅出讲得比较到位,但是在市面上看到的翻译版本翻译的却没有原著的精髓和味道.所以产生了自己将其翻译一下给初学者一些便利的想法.所以才有了这个系列的第一章的翻译.目前剩余的部分依然在翻译过程中,估计不久之后就可以陆续地发出了. 因为本人的水平或者用词问题,本翻译难免有不周详或不正确之处.如果有人看到还望指出,我一定会尽力地修改那些不正确的部分,让更多的人可以看到更优质的资料. Chapter 1 Life before Automatic Referenc