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> # ...
随机推荐
- SpringMVC 的数据绑定
1.数据自动绑定 SpringMVC 框架支持不需要任何数据绑定的注解直接将表单参数绑定到我们的执行方法的参数上. 表单参数:包括 POST 以及 GET 发送过来的参数 就是以内容类型为:encty ...
- 有关xerosploit运行报错问题的有效解决方案
[安装xerosploit]安装xerosploit的步骤如下,我是将xerosploit直接克隆到了根目录下(使用“cd /”到达根目录) git clone https://github.com/ ...
- Invalid YGDirection 'vertical'. should be one of: ( inherit, ltr, rtl )
react native 路由( react-native-router-flux )跳转页面一直都报错 本项目解决方法:不是路由的问题,是跳转的页面有有问题,删除下图标记的红色即可(解决方法是排除法 ...
- STP-11-多生成树:IEEE 802.1s
IEEE802.1s多生成树(MultipleSpanningTrees,MST)有时也称为多STP(MultipleSTP,MSTP),它定义了在使用802.1QVLAN网络中,部署多实例STP的标 ...
- element-ui关于form表单在dialog中的重置
form表单的重置是以第一次打开的数据作为重置标准,如果先打开的是更新,那么重置之后以第一次更新的数据作为标准; Dialog 中的内容是懒加载的,目前 edit (更新)方法的写法导致 Form 刚 ...
- NET Core 2.1.0 now available
ASP.NET Core 2.1.0 now available https://blogs.msdn.microsoft.com/webdev/2018/05/30/asp-net-core-2-1 ...
- js基础拖拽效果
function drag(ele) { const config = { mark: 0, x: 0, y: 0, left: ele.offsetLeft, top: ele.offsetTop, ...
- 【踩坑】List 的陷阱
今天测试iReview项目数据的反馈,发现有些语句总无法执行. 经过调试排查后,发现List<自定义类>返回了空集"[]",却无法进入if语句里面,即 if (List ...
- 【Linux】Ubuntu配置zshell&oh-my-zsh
zshell:https://archive.codeplex.com/?p=shell oh-my-zsh: https://github.com/robbyrussell/oh-my-zsh 终极 ...
- JavaScirpt 的垃圾(garbage collection)回收机制
一.垃圾回收机制—GC Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存. 原理:垃圾收集器会定期(周期性 ...