zoukankan      html  css  js  c++  java
  • C++11常用特性介绍——array容器

    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()将在运行期间捕获非法索引的,默认将程序中断。

  • 相关阅读:
    格式化代码
    hexdump命令
    shell中+,*,[:space:]的用法
    Linux下安装Android的adb驱动-解决不能识别的问题
    android launcher3 home页简易分析
    LINUX 内核代码 errno 错误代码提示 /include/asm/errno.h
    关于mtk Android打开串口权限问题
    关于android MTK相机L版本,切换屏幕比例后,分辨率随之改变,但重新进入相机后原有分辨率不再生效问题
    关于android应用闪屏的几种情况
    Android 笔记
  • 原文地址:https://www.cnblogs.com/zhangnianyong/p/11882672.html
Copyright © 2011-2022 走看看