パープルハット

※当サイトではGoogleアドセンス広告を利用しています

C++ arrayの使い方(for文、最大・最小値、並び替え、検索など)



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, }





最大値・最小値の取得

第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