C++ で関数から配列を返す方法
胡金庫
2023年10月12日
この記事では、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, ]
関数 MultiplyArrayByTwo
は void
として実装することができ、以下の例のように変数 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;
}
著者: 胡金庫
関連記事 - C++ Function
- C++ でのデフォルト パラメータの再定義
- C++ の shellExecute() 関数
- C++ の Time(NULL) 関数
- C++ のクラスの関数宣言における const キーワード
- C++ のコタンジェント関数
- C++ の仮想関数