You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ 如何将vector操作函数改写为适配array类模板的通用版本

适配任意长度std::array的通用函数实现

你不需要为每一种固定长度的array单独编写函数,只需要利用C++的非类型模板参数编写模板函数即可,编译器会自动为不同长度的array实例生成对应的函数版本,使用体验和适配任意长度vector的函数一致。

示例实现代码如下:

#include <array>
#include <iostream>
using namespace std;

// 输出任意长度的int型array内容
template<size_t N> // N为非类型模板参数,代表array的长度,编译期自动推导
void outputArray(const array<int, N>& arr)
{
    for (int item : arr)
        cout << item << " ";
    cout << endl;
}

// 为任意长度的int型array输入内容
template<size_t N>
void inputArray(array<int, N>& arr)
{
    for (int& item : arr)
        cin >> item;
}

使用方式和vector版本的函数完全一致:

int main() {
    array<int, 7> arr7;
    array<int, 10> arr10;
    // 自动适配不同长度的array
    inputArray(arr7);
    inputArray(arr10);
    outputArray(arr7);
    outputArray(arr10);
    return 0;
}
std::array 相比 std::vector 的核心使用价值

std::array的长度固定是编译期约束,它相比vector的优势主要体现在以下几点:

  • 无动态内存开销:std::array的元素存储在栈内存(作为局部变量时),不需要像vector一样在堆上申请动态内存,分配和释放的速度更快,也不会产生堆内存碎片,适合存储长度固定、规模较小的序列。
  • 性能更高:因为长度编译期固定,没有vector动态扩容的额外开销,编译器可以做更多的优化(比如循环展开),运行时性能更稳定。
  • 语义更清晰:声明std::array<int, 7>就明确表示该序列长度固定为7,不会在运行时发生变化,方便后续代码维护,也能在编译期提前发现长度不匹配的错误。
  • 内存布局更轻量:std::array的内存布局和原生C数组完全一致,除了存储元素本身没有额外的管理字段(vector需要额外存储起始指针、长度、容量三个字段),和C语言旧代码交互时也更方便,直接调用data()方法即可获得原生数组指针。

内容的提问来源于stack exchange,提问作者Bazoya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:15:07