std::array 是 C++11 引入的固定大小數組容器,封裝 C 風格數組,支援迭代器、標準算法,本文詳解初始化陷阱、賦值技巧與最佳實踐。
std::array<int, 5> ia = {1, 2, 3, 4, 5}; // GCC 警告:missing braces
std::array<int, 5> ia = {{1, 2, 3, 4, 5}}; // 正確:雙層大括號
原因:std::array 內部封裝 int[5],需符合聚合初始化規則。
std::array<int, 5> ia = {{1, 2, 3, 4, 5}};
std::array<int, 5> ia2;
ia2 = ia; // 整體複製,高效便捷
// ia2 = {1,2,3,4,5}; // 錯誤:不支援列表賦值
// 範圍 for(推薦)
for (const auto& i : ia) cout << i << " ";
// 迭代器
for (auto it = ia.begin(); it != ia.end(); ++it) cout << *it << " ";
// 下標訪問
for (size_t i = 0; i < ia.size(); ++i) cout << ia[i] << " ";
.size()、.at() 邊界檢查、迭代器、標準算法#include <iostream>
#include <array>
#include <algorithm>
int main() {
std::array<int, 5> ia = {{1, 2, 3, 4, 5}};
for (const auto i : ia) cout << i << " ";
cout << endl;
std::array<int, 5> ia2;
ia2 = ia; // 複製賦值
for (const auto i : ia2) cout << i << " ";
cout << endl;
// 使用標準算法
std::reverse(ia.begin(), ia.end());
for (const auto i : ia) cout << i << " ";
cout << endl;
return 0;
}
輸出:
1 2 3 4 5
1 2 3 4 5
5 4 3 2 1
建議優先使用 std::array 替代 C 風格固定數組,獲得類型安全與標準庫兼容性。