arrayとは?
- vectorとは異なる固定長の配列。
- C言語の配列と似ているが、コンテナであるのでサイズの取得や並び替えが容易にできるなど使い勝手がいい(vectorとかと同じ)。
↓↓日本語リファレンス(参考サイト)
cpprefjp.github.io
基本機能
宣言と初期化
arrayを使うためには、以下のヘッダーのインクルードが必要です。
#include <array>
1次元配列の宣言は、
std::array<型名, 要素数> 変数名 = { 初期値 };
というようにできます。
要素数に変数は設定できない点に注意。
n番目の値を取得
変数名[n]
とすれば取得できます。
ソースコード
#include <iostream> #include <array> int main() { // 要素数3のint型配列 std::array<int, 3> arr = { 4, 3, 1 }; // 1番目の値を取得(先頭の値は0番目扱いなことに注意) std::cout << "arr[1] = " << arr[1] << std::endl; }
実行結果
arr[1] = 3
n番目の値を書き換え
変数名[n] = 変更後の値;
ソースコード
#include <iostream> #include <array> int main() { // 要素数3のint型配列 std::array<int, 3> arr = { 4, 3, 1 }; // 1番目の値を-1に変更して表示 arr[1] = -1; std::cout << "arr[1] = " << arr[1] << std::endl; }
実行結果
arr[1] = -1
要素数の取得(size())
変数名.size()で要素数を取得できます。
ソースコード
#include <iostream> #include <array> int main() { std::array<int, 3> arr = { 4, 3, 1 }; std::cout << "arr.size() = " << arr.size() << std::endl; }
実行結果
arr.size() = 3
for文での表示
(1) size()を使った方法
size()で取得した要素数を利用する方法です。#include <iostream> #include <array> int main() { std::array<int, 3> arr = { 4, 3, 1 }; for (int i = 0; i < arr.size(); i++) std::cout << arr[i] << ", "; }
(2) イテレータを使った方法
arrayはコンテナでもあるので、イテレータを使った方法でも取得できます。#include <iostream> #include <array> int main() { std::array<int, 3> arr = { 4, 3, 1 }; for (auto ite = arr.begin(); ite < arr.end(); ite++) std::cout << *ite << ", "; }
実行結果
(1), (2)のどちらでも同じ結果になります。4, 3, 1,
指定した要素が何番目にあるか?
- findをして、該当する要素のイテレータを取得して、std::dinstanceを使ってarrayの先頭から何番目にあるかを取得します。
- 指定した要素が存在しない場合は、配列の要素数と同じ値が取得される。
ソースコード
#include <iostream> #include <array> #include <algorithm> int main() { std::array<int, 6> arr{ 3, 4, -1, 7, 5, 100 }; // 7が何番目にあるか int key1 = 7; auto ite1 = std::find(arr.begin(), arr.end(), key1); int index1 = std::distance(arr.begin(), ite1); std::cout << "key1 = " << key1 << "はarrの" << index1 << "番目にある" << std::endl; // 11が何番目にあるか(存在しない) int key2 = 11; auto ite2 = std::find(arr.begin(), arr.end(), key2); int index2 = std::distance(arr.begin(), ite2); std::cout << "key2 = " << key2 << "はarrの" << index2 << "番目にある" << std::endl; }
実行結果
key1 = 7はarrの3番目にある key2 = 11はarrの6番目にある
昇順・降順に並び替え
alrorithmライブラリ内にあるstd::sortを使えばできます。
ソースコード
#include <iostream> #include <array> #include <algorithm> int main() { std::array<int, 4> arr = { 4, 3, 1, 2 }; //昇順ソート std::sort(arr.begin(), arr.end()); //降順ソート //std::sort(arr.begin(), arr.end(), std::greater<>()); //中身を列挙 std::cout << "arr = { "; for (const auto& a : arr) { std::cout << a << ", "; } std::cout << "}" << std::endl; return 0; }
実行結果
arr = { 1, 2, 3, 4, }
最大値・最小値の取得
- コンテナの最大値・最小値のイテレータを取得することができる関数min(max)_elementを使えばできます。
- イテレータとして取得できるので、「*取得したイテレータ」とすることで最大値・最小値の表示が可能となります。
- 関数の引数は共通で次のようになっています(日本語リファレンス:min_element - cpprefjp C++日本語リファレンス、max_element - cpprefjp C++日本語リファレンス)。
第1引数 | vectorの先頭イテレータ |
---|---|
第2引数 | vectorの末尾イテレータ |
ソースコード
#include <iostream> #include <array> #include <algorithm> int main() { std::array<int, 6> arr{ 3, 4, -1, 7, 5, 100 }; // 最大値・最小値のイテレータを取得 auto maxIte = std::max_element(arr.begin(), arr.end()); auto minIte = std::min_element(arr.begin(), arr.end()); // 表示 std::cout << "max = " << *maxIte << std::endl; std::cout << "min = " << *minIte << std::endl; }
実行結果
max = 100 min = -1