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

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 风格数组的优势。

http://www.xdnf.cn/news/3422.html

相关文章:

  • 软连接和硬连接【Linux操作系统】
  • Spring Boot中集成Guava Cache或者Caffeine
  • 接口测试实战指南:从入门到精通的质量保障之道
  • 【安装指南】Centos7 在 Docker 上安装 RabbitMQ4.0.x
  • 芯片中的pad、strap和probe
  • C++11新特性_委托构造函数
  • 《Android 应用开发基础教程》——第十一章:Android 中的图片加载与缓存(Glide 使用详解)
  • 铸铁划线平板:多行业的精密测量工具(北重铸铁平板厂家)
  • golang常用库之-标准库text/template
  • C++负载均衡远程调用学习之消息队列与线程池
  • 【前端知识】Vue3状态组件Pinia详细介绍
  • 同城跑腿小程序帮取帮送接单抢单预约取件智能派单同城配送全开源运营版源码优创
  • Python实例题:Python获取小说数据并分析
  • 计算方法实验四 解线性方程组的间接方法
  • 使用 n8n 创建一个定时获取“RSS新闻“的工作流
  • (35)VTK C++开发示例 ---将图片映射到平面2
  • 期刊、出版社、索引数据库
  • 从0搭建Transformer
  • 逻辑回归的多分类实战:以鸢尾花数据集为例
  • STL之vector容器
  • MySQL 索引不生效的情况
  • 【Linux】Linux基础概念
  • 树状数组 + 线段树
  • Java学习手册:Spring Security 安全框架
  • 多模态人工智能研究:视觉语言模型的过去、现在与未来
  • 51单片机驱动 矩阵键盘
  • SPOJ 11576 TRIP2 - A Famous King’s Trip 【Tarjan+欧拉回路】
  • Python清空Word段落样式的方法
  • PINNs案例——多介质分区温度场
  • c++环境和vscode常用的一些有用插件