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

C++ 中的静态数组 std::array

目录

1. 什么是 std::array?

2. 基本用法

3. 主要特点

4. 常用操作示例

5. 优点

1. 什么是 std::array?

std::array 是一个模板类,定义在 <array> 头文件中。它是一个固定大小的数组,封装了 C 风格数组(例如 int arr[5]),但提供了更多的功能和安全性。它的主要特点是:

  • 大小在编译时确定:不像 std::vector,std::array 的大小是固定的,无法在运行时动态改变。

  • 与 STL 兼容:它支持标准模板库(STL)的接口,例如迭代器、算法等。

  • 没有额外的内存开销:它的实现与普通数组一样高效,存储在栈上(而不是堆上)。

2. 基本用法

你需要包含 <array> 头文件来使用它。以下是一个简单的例子:

#include <iostream>
#include <array>

int main() {
    // 定义一个大小为5的int类型数组
    std::array<int, 5> arr = {1, 2, 3, 4, 5};

    // 输出数组元素
    for (int i = 0; i < arr.size(); i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

3. 主要特点

(1) 固定大小

std::array 的大小在定义时通过模板参数指定,例如 std::array<int, 5> 表示一个包含 5 个 int 的数组。大小必须是编译时常量。

(2) 访问元素

  • 通过索引:使用 arr[index] 或 at(index)。

    • arr[index]:普通索引访问,不检查边界。

    • arr.at(index):带边界检查,如果越界会抛出 std::out_of_range 异常。

  • 其他方法:

    • front():返回第一个元素。

    • back():返回最后一个元素。

(3) 大小查询

  • size():返回数组元素个数。

  • empty():检查数组是否为空(对于 std::array 总是返回 false,因为大小固定)。

  • max_size():返回数组的最大可能大小(等于 size())。

(4) 初始化

  • 可以用初始化列表:std::array<int, 3> arr = {1, 2, 3};

  • 如果初始化的元素少于数组大小,未指定的元素会被自动初始化为默认值(例如 0 对于 int):

    std::array<int, 5> arr = {1, 2}; // 等价于 {1, 2, 0, 0, 0}

(5) 与 C 风格数组的对比

特性

std::array

C 风格数组(如

int arr[5]

大小是否固定

边界检查

支持(通过

at()

STL 兼容性

内存分配

栈上

栈上

是否知道自己大小

是(

size()

否(需手动跟踪)

4. 常用操作示例

以下是一些常见的操作代码:

#include <iostream>
#include <array>

int main() {
    // 定义并初始化
    std::array<int, 4> arr = {10, 20, 30, 40};

    // 访问元素
    std::cout << "第一个元素: " << arr.front() << std::endl; // 10
    std::cout << "最后一个元素: " << arr.back() << std::endl; // 40
    std::cout << "索引2的元素: " << arr[2] << std::endl;      // 30

    // 大小
    std::cout << "数组大小: " << arr.size() << std::endl;     // 4

    // 使用迭代器遍历
    std::cout << "所有元素: ";
    for (auto it = arr.begin(); it != arr.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // 修改元素
    arr[1] = 50;
    std::cout << "修改后索引1: " << arr[1] << std::endl;      // 50

    return 0;
}

5. 优点

  • 安全性:提供边界检查(通过 at()),避免缓冲区溢出。

  • 现代化:与 STL 容器兼容,可以直接用于算法(如 std::sort、std::find)。

  • 高效:没有动态内存分配,性能与 C 风格数组相当。

6. 局限性

  • 固定大小:无法动态调整大小。如果你需要动态大小的数组,可以使用 std::vector。

  • 栈上分配:如果数组太大,可能导致栈溢出。

相关文章:

  • 安卓设备root检测与隐藏手段
  • mysql进阶(四)
  • 【Linux文件系统】数据在内存和磁盘之间的传输
  • 基于大模型之力,重构 AI 数字化销售版图
  • 《从零开始构建视频同步字幕播放软件》
  • C++蓝桥杯基础篇(九)
  • fmql之Linux WDT
  • Java在word中动态增加表格行并写入数据
  • 【Java代码审计 | 第四篇】SQL注入防范
  • 从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十二) socketio 消息处理
  • Git 如何配置多个远程仓库和免密登录?
  • ruoyi-vue使用线程池进行异步开发
  • pandas-基础(数据结构及文件访问)
  • 【2025年24期免费获取股票数据API接口】实例演示五种主流语言获取股票行情api接口之沪深A股最近10天资金流入趋势数据获取实例演示及接口API说明文档
  • 在Oracle中编写雪花算法升学雪花ID
  • 基于python大数据的汽车舆情可视化及分析系统
  • MySQL的日志
  • 【AUTOSAR 基础软件】存储栈(NvM、MemIf、Fee)详解
  • 蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码
  • git本地仓库链接远程仓库
  • 哪个网站可以接cad图纸做/营销策略从哪几个方面分析
  • 真人百家樂网站建设/百度快速排名技术培训教程
  • 揭阳网站制作托管/精准大数据获客系统
  • 做数学题的网站/如何推广软件
  • wap网站建设方案/百度网址大全在哪里找
  • 微信公众平台怎么做微网站吗/太原seo关键词排名