C++11数组(array)的使用 原创 C++开发 2022年8月17日 17:53 夏至未至 569 当前内容 2239 字,在路上,马上到,马上到 ### 目录 [TOC] ### 数组介绍 `array` 是具有固定大小的容器,这就是说,在定义 `array` 对象时就需要显式指定其所能容纳元素的数目,并且这个数目一经指定就不可再改变了。在创建array时使用初始化列表作为 `array` 的初始值: #include using std::array; int main() { array arr1 = { 1, 2, 3, 4, 5 }; // arr1包含:1 2 3 4 5 array arr2 = { 0 }; // arr2包含:0 0 0 0 0 return 0; } 如果 `array` 中包含的是基本类型,并且没有提供初始化值,则 `array` 中元素的值是未定义的: array arr; // arr中元素的值是未定义的 ### 赋值与交换 使用array的一个好处就是可以将一个相同类型的array对象赋值给另一个对象,array中的元素将会依次进行复制,因此,在赋值之后,两个array具有相同的元素,但需要保证两个array具有相同的元素类型以及大小。但对于一般数组,则不能这样做: array arr1 = { 1, 2, 3, 4, 5 }; array arr2 = { 5, 4, 3, 2, 1 }; array arr3 = arr1; // arr3 包含:1 2 3 4 5 arr3 = arr2; // arr3 包含:5 4 3 2 1 注意,仅能将一个相同类型的array赋值给另一个array,但不能使用初始化列表来赋值array对象: array arr1 = { 1, 2, 3, 4, 5 }; // ERROR: arr1 = { 1, 2, 3 }; 不能使用初始化列表来向array赋值 可以使用array的成员函数fill()来将array中的元素赋为相同的值: array 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 arr1 = { 1, 2, 3, 4, 5 }; array arr2 = { 5, 4, 3, 2, 1 }; swap( arr1, arr2 ); arr1.swap( arr2 ); // 等价于: swap( arr1, arr2 ); ### 历遍array array中具有成员函数size()用来获得array中元素的数目: array 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 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 arr = {1, 2, 3, 4}; arr.empty(); // 检查容器是否为空 arr.size(); // 返回容纳的元素数 ### 更多使用 参考标准库: https://docs.microsoft.com/zh-cn/cpp/standard-library/array-class-stl?view=msvc-170 本文标题: C++11数组(array)的使用 本文作者: 夏至未至 发布时间: 2022年8月17日 17:53 最近更新: 2022年8月23日 13:59 原文链接: 许可协议: 署名-非商业性-禁止演绎 4.0 国际(CC BY-NC-ND 4.0) 请按协议转载并保留原文链接及作者 array(1) 上一个 C++友元(friend)的使用 下一个 C++11元组(tuple)的使用 当前文章评论暂未开放,请移步至留言处留言。