当前位置: 首页> 游戏> 单机 > 营口网站制作公司_动画片制作教程_网站seo优化服务商_百度建站多少钱

营口网站制作公司_动画片制作教程_网站seo优化服务商_百度建站多少钱

时间:2025/7/12 20:51:07来源:https://blog.csdn.net/qq_49443542/article/details/143174124 浏览次数:0次
营口网站制作公司_动画片制作教程_网站seo优化服务商_百度建站多少钱

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

      • std::array容器深度解析
        • 一、函数构造
        • 二、对象初始化
        • 三、元素访问
        • 四、迭代器
        • 五、容器特性
        • 六、元素比较
        • 总结

std::array容器深度解析

std::array是C++11标准库中引入的一个固定大小的数组容器。与原生数组相比,std::array提供了更多的功能和更高的安全性,包括边界检查、迭代器支持和一系列实用的成员函数。本文将从函数构造、对象初始化、元素访问、迭代器、容器特性和元素比较等方面,对std::array进行全面解析。

一、函数构造

在这里插入图片描述

std::array的构造函数根据其大小和元素类型在编译时确定,因此它的大小是固定的,无法在运行时改变。以下是std::array的主要构造函数:

  1. 默认构造函数:创建一个所有元素都初始化为默认值的std::array

    std::array<int, 5> arr; // 所有元素初始化为0(对于int类型)
    
  2. 有参构造函数:创建一个用指定值填充的std::array

    std::array<int, 5> arr(7); // 所有元素初始化为7
    
  3. 列表初始化:通过初始化列表直接设置std::array的值。

    std::array<int, 5> arr = {1, 2, 3, 4, 5};
    
  4. 拷贝构造函数:通过另一个std::array对象来构造新的std::array

    std::array<int, 5> arr1 = {1, 2, 3, 4, 5};
    std::array<int, 5> arr2(arr1); // arr2与arr1具有相同的值
    
  5. 移动构造函数(C++11及以上):通过移动另一个std::array对象来构造新的std::array,避免不必要的复制。

    std::array<int, 5> arr1 = {1, 2, 3, 4, 5};
    std::array<int, 5> arr2(std::move(arr1)); // arr2接管arr1的资源,arr1变为未定义状态
    
二、对象初始化

除了构造函数之外,std::array还支持多种初始化方式,包括聚合初始化和列表初始化。在C++11及更高版本中,列表初始化尤为常用,因为它既简洁又直观。

// 聚合初始化(C++98/03)
int arr_data[5] = {1, 2, 3, 4, 5};
std::array<int, 5> arr_old(std::begin(arr_data), std::end(arr_data)); // 不推荐,因为需要额外的数组和迭代器// 列表初始化(C++11及以上)
std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 推荐方式
三、元素访问

在这里插入图片描述

std::array提供了多种访问元素的方式,包括使用下标运算符[]at成员函数以及frontback成员函数。

  1. 下标运算符[]

    int value = arr[2]; // 访问第三个元素,没有边界检查
    
  2. at成员函数

    try {int value = arr.at(2); // 访问第三个元素,带边界检查
    } catch (const std::out_of_range& e) {std::cerr << "Out of range: " << e.what() << std::endl;
    }
    
  3. frontback成员函数

    int first = arr.front(); // 访问第一个元素
    int last = arr.back(); // 访问最后一个元素
    
四、迭代器

在这里插入图片描述

std::array支持迭代器,包括正向迭代器、反向迭代器、常量迭代器以及常量反向迭代器。这些迭代器允许你以标准库算法兼容的方式遍历std::array中的元素。

// 使用正向迭代器遍历
for (auto it = arr.begin(); it != arr.end(); ++it) {std::cout << *it << " ";
}
std::cout << std::endl;// 使用反向迭代器遍历
for (auto it = arr.rbegin(); it != arr.rend(); ++it) {std::cout << *it << " ";
}
std::cout << std::endl;
五、容器特性

在这里插入图片描述

作为容器,std::array具有一些基本但重要的特性:

  1. 大小固定std::array的大小在编译时确定,且无法更改。
  2. 连续存储std::array的元素在内存中是连续存储的,这意味着你可以像使用原生数组一样使用指针操作。
  3. 内置成员函数std::array提供了许多实用的成员函数,如sizemax_sizeempty(总是返回false,因为std::array总是非空的,只是元素可能未初始化)等,用于获取容器的基本信息。
#include <iostream>
#include <array>
using namespace std;int main()
{std::array<int, 5> arr1 = {1, 2, 3, 4, 5};if(arr1.empty()) std::cout << "arr1 is empty" << std::endl; // 输出此句arr1.size();std::cout << arr1.size() << std::endl; // 输出 5arr1.max_size();std::cout << arr1.max_size() << std::endl; // 输出 5return 0;
}
六、元素比较

在这里插入图片描述

std::array支持元素之间的比较操作,因为它重载了比较运算符(==!=<<=>>=)。这些运算符按元素顺序逐个比较两个std::array对象,直到找到不相等的元素或比较完所有元素。

std::array<int, 5> arr1 = {1, 2, 3, 4, 5};
std::array<int, 5> arr2 = {1, 2, 3, 4, 5};
std::array<int, 5> arr3 = {1, 2, 3, 6, 5};if (arr1 == arr2) {std::cout << "arr1 is equal to arr2" << std::endl; // 输出此句
}if (arr1 != arr3) {std::cout << "arr1 is not equal to arr3" << std::endl; // 输出此句
}

需要注意的是,只有当两个std::array对象的大小和元素类型都相同时,比较操作才是有效的。如果大小或元素类型不同,则比较操作会导致编译错误。

总结

std::array是一个简单而强大的容器,特别适用于需要固定大小数组的场景。它提供了比原生数组更多的功能和更高的安全性,包括边界检查、迭代器支持和元素比较等。通过本文的解析,相信你对std::array有了更深入的了解,并能够在实际编程中灵活运用它。


在这里插入图片描述

关键字:营口网站制作公司_动画片制作教程_网站seo优化服务商_百度建站多少钱

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: