当前位置: 首页 > news >正文

C++11新特性_标准库_std::array

std::array 是 C++11 标准库引入的一个容器,用于表示固定大小的数组。它定义在 <array> 头文件中。下面为你详细介绍其优势和使用方法。

优势

1. 类型安全

与传统的 C 风格数组不同,std::array 是一个模板类,它的类型信息在编译时就已经确定,这避免了很多由于类型不匹配而导致的潜在错误。例如,在传递 std::array 作为函数参数时,编译器会严格检查类型,确保参数类型的一致性。

2. 容器特性

std::array 支持标准库容器的一些通用接口和操作,如 begin()end()size() 等。这使得它可以无缝地与标准库中的算法和迭代器配合使用,提高了代码的可复用性和可维护性。

3. 固定大小

std::array 的大小在编译时就已经确定,不会在运行时发生改变。这有助于编译器进行更多的优化,同时也避免了动态内存分配带来的开销和潜在的内存泄漏问题。

4. 性能高效

由于 std::array 的元素是连续存储在栈上的,因此访问元素的速度非常快,和传统的 C 风格数组一样高效。

5. 边界检查

虽然 std::array 本身不提供内置的边界检查,但可以使用 at() 成员函数进行安全的元素访问。当访问越界时,at() 会抛出 std::out_of_range 异常,这有助于在开发过程中及时发现和处理错误。

使用方法

1. 定义和初始化
#include <iostream>
#include <array>int main() {// 定义一个包含 5 个整数的 std::arraystd::array<int, 5> arr; // 初始化数组元素arr = {1, 2, 3, 4, 5};// 另一种初始化方式std::array<int, 3> arr2 = {10, 20, 30};return 0;
}
2. 访问元素
#include <iostream>
#include <array>int main() {std::array<int, 5> arr = {1, 2, 3, 4, 5};// 使用下标运算符访问元素std::cout << "第一个元素: " << arr[0] << std::endl;// 使用 at() 函数访问元素(提供边界检查)try {std::cout << "第三个元素: " << arr.at(2) << std::endl;// 越界访问,会抛出 std::out_of_range 异常std::cout << arr.at(10) << std::endl; } catch (const std::out_of_range& e) {std::cerr << "异常: " << e.what() << std::endl;}return 0;
}
3. 遍历数组
#include <iostream>
#include <array>int main() {std::array<int, 5> arr = {1, 2, 3, 4, 5};// 使用范围 for 循环遍历数组for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;// 使用迭代器遍历数组for (auto it = arr.begin(); it != arr.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}
4. 获取数组大小
#include <iostream>
#include <array>int main() {std::array<int, 5> arr = {1, 2, 3, 4, 5};// 获取数组的大小std::cout << "数组大小: " << arr.size() << std::endl;return 0;
}
5. 与标准库算法配合使用
#include <iostream>
#include <array>
#include <algorithm>int main() {std::array<int, 5> arr = {3, 1, 4, 1, 5};// 对数组进行排序std::sort(arr.begin(), arr.end());// 输出排序后的数组for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;return 0;
}
#include <iostream>
#include <array>
#include <algorithm>// 定义和初始化示例
void initializationExample() {std::array<int, 5> arr;arr = {1, 2, 3, 4, 5};std::array<int, 3> arr2 = {10, 20, 30};
}// 访问元素示例
void accessElementsExample() {std::array<int, 5> arr = {1, 2, 3, 4, 5};std::cout << "第一个元素: " << arr[0] << std::endl;try {std::cout << "第三个元素: " << arr.at(2) << std::endl;std::cout << arr.at(10) << std::endl;} catch (const std::out_of_range& e) {std::cerr << "异常: " << e.what() << std::endl;}
}// 遍历数组示例
void traversalExample() {std::array<int, 5> arr = {1, 2, 3, 4, 5};for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;for (auto it = arr.begin(); it != arr.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;
}// 获取数组大小示例
void sizeExample() {std::array<int, 5> arr = {1, 2, 3, 4, 5};std::cout << "数组大小: " << arr.size() << std::endl;
}// 与标准库算法配合使用示例
void algorithmExample() {std::array<int, 5> arr = {3, 1, 4, 1, 5};std::sort(arr.begin(), arr.end());for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;
}int main() {initializationExample();accessElementsExample();traversalExample();sizeExample();algorithmExample();return 0;
}    

通过上述示例,你可以看到 std::array 在使用上的便利性和灵活性,同时也能体会到它相对于传统 C 风格数组的优势。

相关文章:

  • 51c嵌入式~电路~合集4
  • 《AI大模型应知应会100篇》第44篇:大模型API调用最佳实践(附完整代码模板)
  • 计算机基础:二进制基础16,八进制加法
  • 虚拟局域网(VLAN)实验(Cisco Packet Tracer)-路由器、交换机的基本配置
  • 关于CSDN创作的常用模板内容
  • 从括号匹配看栈:数据结构入门的实战与原理
  • CSS 架构与命名规范
  • HTTPS协议:更安全的HTTP
  • 基于深度学习的毒蘑菇检测
  • [android]MT6835 Android 关闭selinux方法
  • Cesium 环境搭建
  • STM32复盘总结——芯片简介
  • 工作记录 2017-12-12 + 在IIS下发布wordpress
  • 第二十周:项目开发中遇到的相关问题(一)
  • 【数据结构】堆的完整实现
  • 51单片机驱动 矩阵键盘
  • GESP2024年6月认证C++八级( 第三部分编程题(1)最远点对)
  • GZIPInputStream 类详解
  • 【AI科技】AMD ROCm 6.4 新功能:突破性推理、即插即用容器和模块化部署,可在 AMD Instinct GPU 上实现可扩展 AI
  • 03 - spring security自定义登出页面
  • 几天洗一次头发最好?终于有答案了...
  • 许峰已任江苏省南京市副市长
  • 西夏文残碑等文物来沪,见证一段神秘灿烂的历史
  • 逛了6个小时的上海车展。有些不太成熟的感受。与你分享。
  • 西班牙葡萄牙突发全国大停电,欧洲近年来最严重停电事故何以酿成
  • 赛力斯拟赴港上市:去年扭亏为盈净利59亿元,三年内实现百万销量目标