第9回はC++11での固定長配列になります。 ここからは、C++11で新登場したライブラリについての説明を行っていきます。 固定長配列を使用する場合 1: #include <iostream> 2: 3: using namespace std; 4: 5: int main() 6: { 7: //宣言 8: int arr[5]; 9: 10: //初期化 11: for (auto& i : arr) 12: { 13: i = 0; 14: } 15: 16: //表示 17: for (const auto i : arr) 18: { 19: cout << i << endl; 20: } 21: 22: return 0; 23: } 今まで説明したC++11を合わせてもこのような感じになると思います。 int arr[5] = {0}; とすることも出来ますが、宣言時にしか出来ないのであまり利便性はありません。 1: #include <iostream> 2: #include <array> 3: 4: using namespace std; 5: 6: int main() 7: { 8: //宣言 9: array<int, 5> arr; 10: 11: //初期化 12: arr.fill(0);//配列内を引数の値で初期化するメンバ関数 13: 14: //表示 15: for (const auto i : arr) 16: { 17: cout << i << endl; 18: } 19: 20: return 0; 21: } 結果は最初のプログラムと同じになります。 std::array<型, サイズ> となっています。後は通常の固定長配列と同じように扱うことが出来ます。 ・・・それだけだと、あまり利点が感じられないかもしれないので他の例を出してみます。 1: #include <iostream> 2: #include <array> 3: #include <algorithm> 4: 5: using namespace std; 6: 7: int main() 8: { 9: //初期化の仕方は従来の配列と同じように出来る 10: array<int, 5> a = { 1, 2, 3, 4, 5 }; 11: array<int, 5> b = { 6, 7, 8, 9, 10 }; 12: 13: auto m = [](const int& i){cout << i << endl;}; 14: 15: //イテレータを使った表示 16: for_each(a.cbegin(), a.cend(), m); 17: for_each(b.cbegin(), b.cend(), m); 18: 19: a.swap(b);//配列の中身を交換する 20: 21: //交換後の表示 22: for_each(a.cbegin(), a.cend(), m); 23: for_each(b.cbegin(), b.cend(), m); 24: 25: return 0; 27: } プログラムを見れば分かると思いますが、イテレータがあることが分かります。 このarrayは、"通常の固定長配列+イテレータ等の複数の機能"なので、使うことによる損は無く、むしろ利点が多いので固定長配列を使う時は<array>を使うことをオススメします。 以上でC++11での固定長配列の説明を終わります。 前→C++11講座8回 |