数组与 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";
}