C++11数组了解

Posted 码城

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11数组了解相关的知识,希望对你有一定的参考价值。

原文链接

C++11数组(array)的使用 - 码到城攻使用 std::array 能够让代码变得更加 ‘‘现代化’’,而且封装了一些操作函 数,比如获取数组大小以及检查是否非空https://www.codecomeon.com/posts/221/

数组介绍


array 是具有固定大小的容器,这就是说,在定义 array 对象时就需要显式指定其所能容纳元素的数目,并且这个数目一经指定就不可再改变了。在创建array时使用初始化列表作为 array 的初始值:

#include <array>
using std::array;
int main()

    array<int, 5> arr1 = 1, 2, 3, 4, 5 ;          // arr1包含:1 2 3 4 5  
    array<int, 5> arr2 = 0 ;                      // arr2包含:0 0 0 0 0
    return 0;


如果 array 中包含的是基本类型,并且没有提供初始化值,则 array 中元素的值是未定义的:

array<int, 5> arr;         // arr中元素的值是未定义的


赋值与交换


使用array的一个好处就是可以将一个相同类型的array对象赋值给另一个对象,array中的元素将会依次进行复制,因此,在赋值之后,两个array具有相同的元素,但需要保证两个array具有相同的元素类型以及大小。但对于一般数组,则不能这样做:

array<int, 5> arr1 = 1, 2, 3, 4, 5 ;
array<int, 5> arr2 = 5, 4, 3, 2, 1 ;
array<int, 5> arr3 = arr1;                  // arr3 包含:1 2 3 4 5
arr3 = arr2;                                // arr3 包含:5 4 3 2 1 


注意,仅能将一个相同类型的array赋值给另一个array,但不能使用初始化列表来赋值array对象:

array<int, 5> arr1 = 1, 2, 3, 4, 5 ;
// ERROR: arr1 = 1, 2, 3 ;                         不能使用初始化列表来向array赋值


可以使用array的成员函数fill()来将array中的元素赋为相同的值:

array<int, 5> arr;
arr.fill( 9 );                // arr包含: 9 9 9 9 9


对于其它的序列容器,比如vector,可以使用swap()来交换两个vector,此时,使用swap()具有常量时间复杂度,显得特别高效,这是因为vector中拥有指向动态分配内存的指针,因此,使用swap()交换两个vector仅需要交换其内部指向动态内存的指针即可。同样,可以使用swap()来交换两个array,但由于array在栈上为元素分配内存,array内部并没有包含指向动态内存的指针,因此,使用swap()来交换两个array具有线性时间复杂度,因为交换两个array将会涉及到元素的逐一复制。swap有两种等价的形式,一种作为泛型的算法,另一种则作为array的成员函数:

array<int, 5> arr1 = 1, 2, 3, 4, 5 ;
array<int, 5> arr2 = 5, 4, 3, 2, 1 ;
swap( arr1, arr2 );
arr1.swap( arr2 );                      // 等价于: swap( arr1, arr2 );


历遍array


array中具有成员函数size()用来获得array中元素的数目:

array<int, 5> arr = 1, 2, 3, 4, 5 ;
for ( int i = 0; i != arr.size() ; ++i )

    cout << arr[i] << " ";

cout << endl;


array是序列容器的一种,可以使用迭代器的方式来历遍array,也可以使用for-each循环来历遍array:

array<int, 5> arr = 1, 2, 3, 4, 5 ;
for( auto elem : arr )
    cout << elem << " ";
cout << endl;
for( auto iter = arr.begin(); iter != arr.end(); ++iter )
    cout << *iter << " ";
cout << endl;


其他函数


std::array<int, 4> arr = 1, 2, 3, 4;
arr.empty(); // 检查容器是否为空
arr.size(); // 返回容纳的元素数

=======================
版权声明:本文为码到城攻博主「夏至未至」的原创文章,遵循CC BY-NC-ND 4.0版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.codecomeon.com/posts/221/

以上是关于C++11数组了解的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-11:1814. 统计一个数组中好对子的数目

leetcode-11:1814. 统计一个数组中好对子的数目

leetcode-11:1814. 统计一个数组中好对子的数目

C/C++杂记:NULL与0的区别nullptr的来历

每日一题11.6

Python扩展库Numpy最重要的对象ndarray名称的来历