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

胡金庫 2023年10月12日
  1. ポインター操作を使って C++ で関数から C スタイルの配列を返す
  2. C++ の関数から配列を返すには vector コンテナを使用する
C++ で関数から配列を返す方法

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

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

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

#include <iostream>

using std::cin;
using std::cout;
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::cin;
using std::cout;
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::cin;
using std::cout;
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;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Function

関連記事 - C++ Array