C++ で関数から複数の値を返す

胡金庫 2023年10月12日
  1. C++ で struct を使って関数から複数の値を返す
  2. C++ で std::pair を使って関数から複数の値を返す
  3. C++ で配列を使って関数から複数の値を返す
C++ で関数から複数の値を返す

この記事では、C++ の関数から複数の値を返す方法に関する複数のメソッドについて説明します。

C++ で struct を使って関数から複数の値を返す

カスタム定義の struct 変数を使用して、関数から複数の値を返すことができます。つまり、整数のベクトルで最大値/最小値を検索する関数から int ペアを返す 2つのデータメンバー構造を実装する例を示します。ニーズに合わせて任意のタイプの struct を定義し、データメンバー数を拡張できることに注意してください。この場合、ローカルの struct 変数を findMaxMin 関数スコープで宣言し、値で main ルーチンに返します。struct 変数は、main 関数で初期化し、参照によって findMaxMin に渡して、結果値をそこに格納することもできます。

#include <iostream>
#include <vector>

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

struct IntPair {
  int first, second;
} typedef IntPair;

IntPair findMaxMin(vector<int> &arr) {
  IntPair ret;
  int max = arr[0];
  int min = arr[0];

  for (const auto &item : arr) {
    if (item > max) max = item;
    if (item < min) min = item;
  }

  ret.first = max;
  ret.second = min;
  return ret;
}

int main() {
  vector<int> array = {1,  2,  3,  4,  5,  6,  7,  8,  9,  10,
                       11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

  auto ret = findMaxMin(array);
  cout << "Maximum element is " << ret.first << ", Minimum - " << ret.second
       << endl;

  return EXIT_SUCCESS;
}

出力:

Maximum element is 20, Minimum - 1

C++ で std::pair を使って関数から複数の値を返す

std::pair は C++ 標準ライブラリで提供されており、ペアのように 2つの異種オブジェクトを格納できます。したがって、カスタムの struct を定義せずに前の例を再実装できます。std::pair にはすでに広範な機能が組み込まれているためです。1つの欠点は、他の複数要素構造を格納しない場合にのみ 2つの値を返すことができることです。max/min 検索アルゴリズムを STL アルゴリズムと交換したことに注意してください-それぞれ std::max_elementstd::min_element

#include <iostream>
#include <vector>

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

std::pair<int, int> findMaxMin2(vector<int> &arr) {
  std::pair<int, int> ret;

  auto max = std::max_element(arr.begin(), arr.end());
  auto min = std::min_element(arr.begin(), arr.end());

  ret.first = arr.at(std::distance(arr.begin(), max));
  ret.second = arr.at(std::distance(arr.begin(), min));
  return ret;
}

int main() {
  vector<int> array = {1,  2,  3,  4,  5,  6,  7,  8,  9,  10,
                       11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

  auto ret = findMaxMin2(array);
  cout << "Maximum element is " << ret.first << ", Minimum - " << ret.second
       << endl;

  return EXIT_SUCCESS;
}

出力:

Maximum element is 20, Minimum - 1

C++ で配列を使って関数から複数の値を返す

または、C スタイルの配列を宣言して、関数に複数の値を格納して返すこともできます。このメソッドは、大量の値を操作するためのより簡単なインターフェースを提供します。呼び出し元関数で配列を宣言し、そのアドレスを呼び出し先に渡す方が効率的です。このように、巨大な配列でさえ、オーバーヘッドを増やすことなく、たった 1つのポインターを使用して渡すことができます。

#include <iostream>
#include <vector>

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

int *findMaxMin2(vector<int> &arr, int ret[]) {
  auto max = std::max_element(arr.begin(), arr.end());
  auto min = std::min_element(arr.begin(), arr.end());

  ret[0] = arr.at(std::distance(arr.begin(), max));
  ret[1] = arr.at(std::distance(arr.begin(), min));

  return ret;
}

int main() {
  vector<int> array = {1,  2,  3,  4,  5,  6,  7,  8,  9,  10,
                       11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
  int ret_array[2];

  auto ret = findMaxMin2(array, ret_array);
  cout << "Maximum element is " << ret[0] << ", Minimum - " << ret[1] << endl;

  return EXIT_SUCCESS;
}

出力:

Maximum element is 20, Minimum - 1
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ Function