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> # ...
随机推荐
- easyui---panel(面板)
panel笔记: EASYUI panel: class:easyui-panel,带有title 打开:onclick="javascript:$('#c').panel('open')& ...
- Django框架之MVT(2)
Django框架之MVT 1. MVT模型 - module:模型,和数据库相关的 - template:模板,存放html文件,模板语法(目的是将变量如果巧妙的嵌入到h ...
- Luogu P3384 【模板】树链剖分
...rt...安利一发大佬博客https://www.cnblogs.com/ivanovcraft/p/9019090.html 注意:不要把dfn和rw弄混了... #include<cs ...
- stm32f107的使用:
一 不能支持软件仿真: 二 外部晶体推荐25MHZ,但如果不用音频接口,也可以使用8M晶体,需修改这里成8000000: 此时设置如下: 并修改这里 改为: 因为
- python学习《一》
从词篇博客开始,记录python3.0学习笔记 python3里 字符串用双引号,或者单引号,包起来 3双引号和3单引号 代表换行
- P3290 寻找第K大数
描述 寻找第K大数 N个小朋友在一起做游戏.每个小朋友在自己的硬纸板上写一个数,然后同时举起来.接着,小y老师提一个问题,看哪个小朋友先抢答出来.问题是:在这N个数中,第K大的是哪个数?请你编程完成. ...
- 邮箱/邮件地址的正则表达式及分析(JavaScript,email,regex)
简言 在做用户注册时,常会用到邮箱/邮件地址的正则表达式.本文列举了几种方案,大家可以根据自己的项目情况,选择最适合的方案. 方案1 (常用) 规则定义如下: 以大写字母[A-Z].小写字母[a-z] ...
- 在使用seek()函数时,有时候会报错为 “io.UnsupportedOperation: can't do nonzero cur-relative seeks”,代码如下:
__author__ = 'ZHHT' #!/usr/bin/env python # -*- coding:utf-8 -*- import os f = open("test1" ...
- php 判断字符串中是否包含另一个字符串 strpos
strpos (PHP 4, PHP 5, PHP 7) strpos — 查找字符串首次出现的位置 说明 strpos ( string $haystack , $needle [, int $o ...
- gitlab api批量操作 批量添加用户
import os,time import requests,json # def downloadFile(name, url): # headers = {'Proxy-Connection': ...