Z
ZHANK
编程在线教程C++ 教程数组与 std::array
数组与字符串

数组与 std::array

C 风格数组、std::array 安全封装、多维数组

数组与 std::array

C 风格数组轻量但危险;std::array 是它的 C++ 安全替代——封装大小、带边界检查。

学完本章你将: 掌握 C 数组、std::array 安全用法、多维数组。


C 风格数组 vs std::array

cpp
#include <iostream>
#include <array>

int main() {
    // C 风格数组(不推荐)
    int c_arr[5] = {1, 2, 3, 4, 5};
    // 无法知道长度(传给函数会退化),容易越界

    // std::array(推荐)
    std::array<int, 5> arr = {1, 2, 3, 4, 5};

    std::cout << arr.size() << "\n";     // 5
    std::cout << arr.front() << "\n";    // 1
    std::cout << arr.back() << "\n";     // 5

    // 带边界检查的访问
    try {
        std::cout << arr.at(10);  // 抛出 std::out_of_range
    } catch (const std::out_of_range &e) {
        std::cout << "越界!\n";
    }

    return 0;
}

遍历数组

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

// C++11 范围 for(推荐)
for (int x : arr) std::cout << x << " ";

// 传统下标(不推荐——容易越界)
for (size_t i = 0; i < arr.size(); i++) {
    std::cout << arr[i] << " ";
}

多维数组

cpp
// std::array 嵌套
std::array<std::array<int, 3>, 2> matrix = {{
    {1, 2, 3},
    {4, 5, 6},
}};

for (const auto &row : matrix) {
    for (int val : row) {
        std::cout << val << " ";
    }
    std::cout << "\n";
}