C++で関数から配列を返す方法

  1. ポインター操作を使って C++で関数から C スタイルの配列を返す
  2. C++の関数から配列を返すには vector コンテナを使う

この記事では、C++で関数から配列を返す方法を紹介します。

ポインター操作を使って C++で関数から C スタイルの配列を返す

C/C++では、array[] 記法が関数のパラメータとして渡された場合、それは渡された配列の最初の要素へのポインタに過ぎません。したがって、我々が構築する必要がある関数プロトタイプは、配列に格納されている型へのポインタを返すものです。関数が戻ってきたら,その要素に [] という配列記法でアクセスしたり,ポインタ自体を参照したりすることができます(先ほどと同様にポインタの演算を行うこともできます).

#include <iostream>

using std::cout; 
using std::cin;
using std::endl; 
using std::string;

int *MultiplyArrayByTwo(int arr[], int size){
    for (int i = 0; i < size; ++i) {
        arr[i] *= 2;
    }
    return arr;
}

int main(){
    constexpr int size = 10;
    int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    int *ptr = MultiplyArrayByTwo(c_array, size);

    cout << "array = [ ";
    for (int i = 0; i < size; ++i) {
        cout << ptr[i] << ", ";
    }
    cout << "]" << endl;

    return EXIT_SUCCESS;
}

出力:

array = [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, ]

関数 MultiplyArrayByTwovoid として実装することができ、以下の例のように変数 c_array から変更された要素にアクセスすることができることに注目してください。

#include <iostream>

using std::cout;
using std::cin;
using std::endl
using std::string;

void MultiplyArrayByTwo(int arr[], int size)
{
    for (int i = 0; i < size; ++i) {
        arr[i] *= 2;
    }
}

int main(){
    constexpr int size = 10;
    int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    MultiplyArrayByTwo(c_array, size);

    cout << "array = [ ";
    for (int i = 0; i < size; ++i) {
        cout << c_array[i] << ", ";
    }
    cout << "]" << endl;

    return EXIT_SUCCESS;
}

C++の関数から配列を返すには vector コンテナを使う

このバージョンでは、配列を vector コンテナに格納しています。

関数とは別のオブジェクトを返すので、cpp_array を使ってアクセスすることはできません。新しい変数を作成し、そこに関数の戻り値を代入する必要があります。そうすれば、それを繰り返し処理して結果を出力することができます。

#include <iostream>
#include <vector>

using std::cout;
using std::cin;
using std::endl
using std::string;
using std::vector;

vector<int> MultiplyArrayByTwo(const vector<int> *arr)
{
    vector<int> tmp{};

    for (const auto &item : *arr) {
        tmp.push_back(item * 2);
    }
    return tmp;
}

int main(){
    vector<int> cpp_array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    auto cpp_array_2x = MultiplyArrayByTwo(&cpp_array);

    cout << "array = [ ";
    for (int i : cpp_array_2x) {
        cout << i << ", ";
    }
    cout << "]" << endl;

    return EXIT_SUCCESS;
}

関連記事 - C++ Array

  • C++ で 2 次元配列を関数に渡す方法
  • C++ で配列を印刷する方法
  • comments powered by Disqus