std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中。

一、概要

  array是C++11新引入的容器类型,与内置数组相比,array是一种更容易使用,更加安全的数组类型,可替代内置数组,作为数组升级版,继承数组最本特性,同时融入部分操作。

二、定义与初始化

  array和数组一样,为固定大小容器类型,定义时即需声明大小与类型

  1)内置数组初始化

    int array[10] = {0};

    int array[10] = {1,2,3,4,5,6,7,8,9,0};

    int array[]     = {1,2,3,4,5,6,7,8,9,0};

    int array[10] = {1,2,3};//后面的7个数据的值在Qt上会被随机

    注:数组的初始化不能直接使用赋值,只能通过遍历的形式拷贝

  2)array的初始化

    std::array<int,10> a = {1,2,3,4,5,6,7,8,9,0};

    std::array<int,10> a{1,2,3,4,5,6,7,8,9,0};

    std::array<int,10> a{1,2,3};//后面的7个数据的值在Qt上会初始化为0

    int arr[10]{10,9,8,7,6,5,4,3,2,1};

    std::array array<int,10>;

    memcpy(array.data(),arr,sizeof(arr));//拷贝初始化

    array.fill(5);//填充初始化(所有数据初始化为5)

    array = arr;//赋值初始化

三、访问

  1)内置数组的访问:下标、指针和迭代器

    int array[10] = {1,2,3,4,5,6,7,8,9,0};

    int value = array[0];//通过下标获取数组的第一个元素

    int value = *p;   //通过指针获取数组的第一个元素

    for(int *i=bebin(array);i != end(array);i++)//C++11中为了给数组提供更加安全的访问方式,引入了begin()和end()函数

    {

      std::cout << *i << " ";

    }

    std::cout << std::endl;

  2)array的访问:下标、at、指针和迭代器

    std::array<int,10> array{1,2,3,4,5,6,7,8,9,0};

    //下标访问

    for(std::size_t i=0;i<array.size();i++)

    {

      std::cout << array[i] << " ";

    }

    std::cout << std::endl;

    //font、at、back访问

    for(std::size_t i=0;i<array.size();i++)

    {

      std::cout << array.at(i) << " ";

    }

    std::cout << std::endl;

    //正向、反向、常量迭代器:begin、cbegin、rbegin、crbegin、end、cend、rend、crend

    std::array<int,10>::iterator iter;

    for(iter=array.begin;iter != array.end();iter++)

    {

      std::cout << *iter << " ";//迭代器访问

    }

    std::cout << std::endl;

    //指针:data

    int arr[10]{10,9,8,7,6,5,4,3,2,1};

    std::array array<int,10>;

    memcpy(array.data(),arr,sizeof(arr));

    for(std::size_t i=0;i<array.size();i++)

    {

      std::cout << array[i] << " ";/./输出:10 9 8 7 6 5 4 3 2 1

    }

    std::cout << std::endl;

  array是数组的升级版,将数组正式纳入到容器范畴,array在使用和性能上都要强于内置数组,对于固定大小的使用场景,可用array替代数组工作。

  尽量使用at方法来访问元素,因为运算符[]不会对索引值进行检查,像array[-1]是不会报错的。使用at()将在运行期间捕获非法索引的,默认将程序中断。

C++11常用特性介绍——array容器的更多相关文章

  1. C++11常用特性介绍——auto类型修饰符

    1.C++11常用特性介绍 从本篇开始介绍C++11常用特性,大致分:关键字及新语法.STL容器.多线程.智能指针内存管理,最后讲一下std::bind和std::function 二.关键字和新语法 ...

  2. C++11常用特性介绍——列表初始化

    一.列表初始化 1)C++11以前,定义初始化的几种不同形式,如下: int data = 0;   //赋值初始化 int data = {0};   //花括号初始化 int data(0); / ...

  3. C++11常用特性介绍——Lambda表达式

    一.C++11采用配对的方括号[]来创建一个匿名函数并执行,如: #include <iostream> int main() { auto func = []{ std::cout &l ...

  4. C++11常用特性介绍——decltype关键字

    一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在 ...

  5. C++11常用特性介绍——左值引用、右值引用

    一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是 ...

  6. C++11常用特性介绍——for循环新用法

    一.for循环新用法——基于范围的for循环 for(元素类型 元素对象 : 容器对象) { //遍历 } 1)遍历字符串 std::string str = "hello world&qu ...

  7. C++11常用特性介绍——constexpr变量

    一.constexpr变量 1)将变量声明为constexpr类型以便由编译器来验证变量的值是否为一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化,如: in ...

  8. C++11常用特性介绍——nullptr关键字及用法

    一.nullptr关键字及用法 1)NULL的二义性 void func(int) {} void func(int*) {} 当函数调用func(NULL)时会执行哪个函数呢? 先看C++对NULL ...

  9. 【转】C++11常用特性的使用经验总结

    出处 http://www.cnblogs.com/feng-sc C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++11方 ...

随机推荐

  1. win api + 基础乐理产生正弦波声音

    暂时记录. 感觉想写个电子钢琴乐程序了,不过感觉音有点怪怪的. #include <iostream> #include <windows.h> #include <Mm ...

  2. 使用Eclipse远程调试云服务器上的微信公众项目

    云服务器系统:centos 7.3 如何在Eclipse上调试我们在云服务器上的项目呢,下面介绍一下步骤:   1.因为root账号不支持远程调试,首先需要在linux上创建一个新的用户,然后用该用户 ...

  3. 解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题

    npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

  4. 解决fences2.01在win8.1的状态下无法移动桌面图标问题

    Fences 2.01破解版      链接:http://pan.baidu.com/s/1eSH2tGI 密码:o7oe Fences 2.01 win8.1修复补丁(stardock2.11)  ...

  5. buuctf 基础破解

    首先下载压缩包 解压之后发现是另一个压缩包 另一个压缩包上写着基础破解 然后用暴力破解的方法破解 然后搜了一下 暴力破解一般的长度是多少 然后搜到的结果是 长度为8的时候电脑都要破解好几年 所以我猜测 ...

  6. HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER

    这个问题可能是我第一个遇到吧,hadoop启动时WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USE ...

  7. tmux的基本使用

    tmux的基本使用 tmux 最近发现了一个linux终端非常好用的工具,可以快速分屏 使用方法 参考

  8. CSS学习(2)Id和Class选择器

    id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式. HTML元素以id属性来设置id选择器,CSS 中 id 选择器以 "#" 来定义. 以下的样式 ...

  9. [原]eclipse中spring配置文件的自动提示和命名空间的添加

    在用spring或者springmvc框架进行开发时,编辑applicationcontext.xml等配置文件是必不可少的,在eclipse中打开applicationcontext.xml通常是这 ...

  10. Linux下查看当前文件大小的命令

    1.ls -lht 列出每个文件的大小和当前目录所有文件大小总和 2.du -sh * 列出当前文件夹下的所有子文件的大小 看你需要啥样的,自己来吧