C++ STL:array容器常见用法

std::array是C++11引入的固定大小数组容器,定义在 <array>头文件中。

1、特点

  • 编译时确定,不可改变

  • 元素连续存储

  • 在栈上分配,性能好,无堆分配开销

  • 兼容STL,支持迭代器和算法

  • 支持拷贝和赋值

  • 需要动态大小时使用 std::vector

2、创建和初始化

cpp 复制代码
#include <array>

std::array<int, 5> arr1;           // 默认初始化
std::array<int, 5> arr2 = {1, 2, 3, 4, 5};
std::array<int, 5> arr3{};         // 全部初始化为0

// C++17起可省略类型和大小(推导)
std::array arr3 = {1.0, 2.0, 3.0};  // std::array<double, 3>

3、访问元素

cpp 复制代码
std::array<int, 5> arr = {1, 2, 3, 4, 5};

// 多种访问方法
arr[0] = 10;                       // 不检查边界
int x = arr.at(1);                 // 检查边界,越界抛异常
int first = arr.front();           // 第一个元素
int last = arr.back();             // 最后一个元素
int* ptr = arr.data();             // 原始指针

4、遍历

cpp 复制代码
// 容量信息
std::cout << "Size: " << arr.size();           // 5
std::cout << "Empty: " << arr.empty();         // false

// 遍历
for (int i = 0; i < arr.size(); ++i) {
    std::cout << arr[i] << " ";
}

// 范围for循环
for (const auto& elem : arr) {
    std::cout << elem << " ";
}

// 迭代器
for (auto it = arr.begin(); it != arr.end(); ++it) {
    std::cout << *it << " ";
}

5、与算法库绑定

cpp 复制代码
#include <algorithm>
#include <numeric>

std::array<int, 5> arr = {5, 3, 1, 4, 2};

std::sort(arr.begin(), arr.end());              // 排序
int sum = std::accumulate(arr.begin(), arr.end(), 0);  // 求和
auto it = std::find(arr.begin(), arr.end(), 3); // 查找
std::reverse(arr.begin(), arr.end());           // 反转

6、结构体绑定(C++17)

cpp 复制代码
std::array<int, 3> arr = {10, 20, 30};
auto [x, y, z] = arr;  // x=10, y=20, z=30
相关推荐
禾小西35 分钟前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨38 分钟前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
徐小黑ACG1 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
优橙教育2 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
SEO_juper2 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
西柚小萌新2 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
北极有牛2 小时前
cpp学习笔记--常量指针
java·开发语言·算法
半杯咖啡半行码3 小时前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
caoerzhong3 小时前
JeeWMS 开源 WMS 部署避坑指南:Java 仓库管理系统的环境基线、四类根因与可复现交付
java·开发语言·开源
时间的拾荒人3 小时前
Qt 界面优化:绘图详解 —— 从基础图形到图片处理
开发语言·qt·面试