vectorとarrayをつかう
どちらも当然引数に渡すとコピーされる。(一応確認)
void func(vector<int> v) { v[0] = 3; } void func(array<int, 3> v) { v[0] = 3; } int main() { vector<int> v1 = { 1, 2, 3 }; array<int, 3> v2 = { 1, 2, 3 }; func(v1); func(v2); printf("%d, %d", v1[0], v2[0]); }
当たり前だけど…。変更したければ参照を用いる。
array<int, 3> v; const auto l = [](array<int, 3>& it, size_t n) { for(auto& it : it) { it = n; } }; l(v, 10);
は当然10で埋められる。
arrayで確保するはいいがコンストラクタの引数を与えられないので、改めて要素を確保して0で初期化する例 :
array<vector<int>, 3> v; const auto l = [](array<vector<int>, 3>& it, size_t size) { for(auto& it : it) { it = vector<int>(size); std::fill(it.begin(), it.end(), 0); } }; l(v, 5); v[0][0] = 0;