STL容器之Array[转]
转自https://blog.csdn.net/sin_geek/article/details/51067874 作者 Sin_Geek
简介
array在头文件<array> 中定义
namespace std
{
template<class T, size_t N>
class array;
}
array是固定元素个数的容器,与相应C数组的语义相同,容器array< T,N> 的大小等于相应C数组T[N]的大小,且性能也与C数组相同。但是它提供了C++标准容器的相应特性,如可以查询容器大小,支持复制,支持随机迭代器等等。不支持设置分配器。
对于长度为0的std::array< T,0>存在一个特例。此时array.begin() == array.end(),且等于某个特定值。对这种array调用front()或back()的行为是未定义的。
array是一个简单集合(没有构造函数,也没有私有或保护成员),同时也可以当作一个有N个相同类型元素的tuple。
数组操作
构造、复制与析构
array<Elem,N> c //默认构造函数; 创建一个默认初始化的数组
array<Elem,N> c(c2) //复制构造函数; 创建另一个与c2同型的vector副本(所有元素都被复制)
array<Elem,N> c = c2 //复制构造函数; 创建另一个与c2同型的vector副本(所有元素都被复制)
array<Elem,N> c(rv) //移动构造函数; 拿走右值rv的元素创建一个新的数组
array<Elem,N> c = rv //移动构造函数; 拿走右值rv的元素创建一个新的数组
array<Elem,N> c = initlist //使用初始化列表创建一个初始化的数组
非变动性操作
c.empty() //判断容器是否为空,与size()==0相同,但可能更快
c.size() //返回当前元素数量
c.max_size() //返回可容纳的元素最大数量
c1 == c2 //判断c1与c2是否相等
c1 != c2 //判断c1与c2是否不相等,等同于!(c1==c2)
c1 < c2 //判断c1是否小于c2
c1 > c2 //判断c1是否大于c2
c1 <= c2 //判断c1是否小于等于c2
c1 >= c2 //判断c1是否大于等于c2
赋值
c = c2 //将c2所有元素赋值给c
c = rv //将右值对象rv的所有元素移动赋值给c
c.fill(val) //将val赋值给数组c里的每个元素
c1.swap(c2) //交换c1和c2的数
swap(c1,c2) //交换c1和c2的数
元素存取
c[idx] //返回索引idx所标示的元素,不进行范围检查
c.at(idx) //返回索引idx所标示的元素,如果越界,抛出range-error
c.front() //返回第一个元素,不检查第一个元素是否存在
c.back() //返回最后一个元素,不检查最后一个元素是否存在
迭代器相关函数
c.begin() //返回一个随机存取迭代器,指向第一个元素
c.end() //返回一个随机存取迭代器,指向最后一个元素
c.cbegin() //返回一个随机存取常迭代器,指向第一个元素
c.cend() //返回一个随机存取常迭代器,指向最后一个元素
c.rbegin() //返回一个逆向迭代器,指向逆向迭代的第一个元素
c.rend() //返回一个逆向迭代器,指向逆向迭代的最后一个元素
c.crbegin() //返回一个逆向常迭代器,指向逆向迭代的第一个元素
c.crend() //返回一个逆向常迭代器,指向逆向迭代的最后一个元素
栗子
#include <string>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <array>
using namespace std;
int main()
{
// 使用列表初始化来构造
array<int, 3> a1{{1,2,3}}; // C++11中需要使用双重花括号
array<int, 3> a2{1, 2, 3}; // C++14直接使用一层花括号即可
array<std::string, 2> a3 = { {string("a"), "b"} };
// 支持基本的容器操作
sort(a1.begin(), a1.end());
reverse_copy(a2.begin(), a2.end(), ostream_iterator<int>(cout, " "));
// 支持范围for
for(auto& s: a3)
cout << s << ends;
}
输出
3 2 1 a b
STL容器之Array[转]的更多相关文章
- [知识点]C++中STL容器之map
UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...
- [知识点]C++中STL容器之set
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...
- [知识点]C++中STL容器之vector
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...
- STL容器之vector
[1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...
- STL容器之set
[1]set容器 一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. [2]set容器方法 (1)set构造函数.插入函数.遍历过程 应用示例代码如下: #include <set& ...
- STL容器之map
[1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...
- C++ STL容器之 stack
STL 中的 stack 是一种容器适配器,而不是一种容器. 它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为st ...
- STL容器之list
[1]list简介 实质上,list容器就是一个双向链表,可以高效地进行插入.删除操作. [2]list链表常用方法 (1)构造.赋值.清空.删除.插入.判空等 应用示例代码如下: #include ...
- STL容器之deque
[1]deque容器 deque 是对 vector 和 list 优缺点的结合,它是处于两者之间的一种容器. [2]deque方法集 应用示例代码: #include <deque> # ...
随机推荐
- 基于SSM搭建网站实现增删改查
网站源码地址:https://github.com/MyCreazy/BasicOperateWebSite.git 使用maven搭建网站的时候,记得选用war包格式,有时候maven包没有引用进来 ...
- java基础第十一篇之Date、Math、自动装箱和拆箱
Date类 表示一个瞬间,就是一个时刻 * * 构造方法: * public Date();//创建一个表示当前系统时间的Date对象 * public Date(long time);//毫秒值,距 ...
- spring事物回滚机制 (事务异常回滚,捕获异常不抛出就不会回滚)
当异常被捕获catch的时候,spring的事物则不会回滚 为什么不会滚呢?? spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常 ...
- [软件工程基础]2017.11.06 第十次 Scrum 会议
具体事项 项目交接燃尽图 每人工作内容 成员 已完成的工作 计划完成的工作 工作中遇到的困难 游心 #62 调试生成报告代码:#60 整理物理网站上的实验流程:#71 撰写报告生成搭建文档: 李煦通 ...
- 熔断降级(Polly)
熔断降级(Polly) https://www.cnblogs.com/qhbm/p/9224307.html 一. 什么是熔断降级 熔断就是"保险丝".当出现某些状况时,切断服务 ...
- Android Bitmap(位图)详解
一.背景 在Android开发中,任何一个APP都离不开图片的加载和显示问题.这里的图片来源分为三种:项目图片资源文件(一般为res/drawable目录下的图片文件).手机本地图片文件.网络图片资源 ...
- 【.Net MVC4 connectionString设置】获取SQL server数据库的连接字符串
第一步:创建向导文件 在桌面创建一个txt文件,并将文件后缀改成“.udl”. 第二步:选择“提供程序”tab页 双击新创建的“.udl”文件,进入后选择“提供程序”tab页,选择“Micros ...
- 编译安装php容易出现的问题以及解决办法
http://crybit.com/20-common-php-compilation-errors-and-fix-unix/
- css position 定位模式
定位 定位模式: static relative absolute fixed 边偏移 :top bottom left right 一般的定位必须要有定位模式以及边偏移 static 静态定位 默 ...
- Dom EVENT对象
Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! 一:测试按键 function which ...