{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/cpp-builtin-array-vs-std-array/",
  "atlas": "https://www.pystone.net/?node=cpp-builtin-array-vs-std-array#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/cpp-builtin-array-vs-std-array.md",
  "context": "https://www.pystone.net/notes/cpp-builtin-array-vs-std-array.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:cpp-builtin-array-vs-std-array",
  "slug": "cpp-builtin-array-vs-std-array",
  "title": "C++内置数组和array的比较",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "C++内置数组和array的比较",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "e2e08c9eeeb80f01d18fefb1c8f6569d4ccd4289326219fd0a7481e3864b1bb2",
  "assets": [],
  "headings": [
    {
      "depth": 1,
      "text": "C++内置数组和array的比较",
      "anchor": "c内置数组和array的比较",
      "citation": "https://www.pystone.net/notes/cpp-builtin-array-vs-std-array/#c%E5%86%85%E7%BD%AE%E6%95%B0%E7%BB%84%E5%92%8Carray%E7%9A%84%E6%AF%94%E8%BE%83"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:programming-languages-and-runtimes",
      "title": "编程语言与运行时",
      "url": "https://www.pystone.net/notes/programming-languages-and-runtimes/",
      "atlas": "https://www.pystone.net/?node=programming-languages-and-runtimes#knowledge-atlas",
      "label": "编程语言与运行时",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "C++中的“C++内置数组和array的比较”导航项",
      "citation": "https://www.pystone.net/notes/programming-languages-and-runtimes/#c"
    }
  ],
  "contentMarkdown": "# C++内置数组和array的比较\n\n﻿# C++内置数组和array的比较\n\n> 创建时间：2020/1/16 21:38\n\narray是C++11中新提出来的容器类型，与内置数组相比，array是一种更容易使用，更加安全的数组类型，可以用来替代内置数组。作为数组的升级版，继承了数组最基本的特性，也融入了很多容器操作，下面介绍array和内置数组。\n\narray和数组一样，是一种固定大小的容器类型，在定义的时候就要声明大小和类型。\n\n定义和初始化：\n\n数组的初始化有两种：默认初始化和列表初始化\n\nint arr[10]; //10个值为0的int型整数\n\nint arr[5]={1,2,3,4,5};\n\nint arr[]={1,2,3};//维度为3 的数组，显式的列出所有元素\n\nint arr[5]={1,2,3};显式的初始化数组的前三个元素，剩下的元素默认初始化\n\n数组初始化不能直接使用拷贝和赋值!!!数组的传递只能是遍历的形式来拷贝\n\narray的初始化：和数组初始化差不多\n\narray<int,10> ial;\n\narray<int,10> ial1={0,1,2,3};\n\n和数组不同的是，array可以使用拷贝和赋值的形式进行初始化\n\narray<int,10> copy=ial1;//只要保证两者的类型一致就可以（包括元素类型和大小）\n\n使用方式：\n\n数组的访问：下标、指针、迭代器（和vector、array一样在内存中都是使用连续内存）\n\n使用下标可以随机访问数组的元素，注意不要超出数组合理的范围。标准库中的vector、string和array对于下标的运算要求下标必须是无符号类型，而数组则没有这个限制。\n\n例如：int *p=&arr[2];//p指向数组的第三个元素，指针的起点是在第三个元素\n\nint j=p[1];//p[1]等价于*(p+1)，也就是arr[3]\n\nint i=p[-2];//等价于*(p-2)，也就是arr[0]\n\n只要保证指针运算后还在数组的范围内即可\n\n数组名其实就是指向第一个元素的指针\n\nint *p=arr;或者int *p=&arr[0];都是可以的，或者直接就用数组名作为指针进行运算。\n\n在c++11中给数组提供了更加安全的访问方式，类似于迭代器的操作，但是数组不是类类型，并没有成员函数，新标准中引入了begin()和end()函数\n\nint *beg=begin(arr);//指向首元素\n\nint *last=end(arr);//指向尾元素的下一个\n\n同理，如果要是遍历数组，同样可以使用范围for语句。\n\narray的使用\n\narray与数组最大的区别是array是一种容器类型，它支持一系列容器操作，但是它和数组更接近，很多通用的容器操作它却不支持，因此在这里和数组来比较。\n\n下面从容器的角度来看array的区别\n\n1.不支持局部拷贝\n\n例如不允许C c(b, e);//将迭代器b和e之间的元素拷贝到c\n\n不允许用C1={a,b,c...};用列表中的元素替换C1\n\n2.不允许添加或删除元素，因为array是固定大小的。\n\n相比于数组，array可以使用成员函数。其中包括：\n\n1.可以使用拷贝和赋值，只要保证类型一致即可\n\n2.使用swap函数，a.swap(b);或者swap(a,b);交换两者的元素\n\n3.使用正向和反向迭代器\n\narray是数组的升级版，将数组正式纳入到容器的范畴。array在使用和性能上都要强于内置数组，对于一些固定大小的使用场景，可以用array来替代原先数组的工作。\n"
}
