C++で関数を複数の配列に戻す方法
2305 ワード
python回転c++最大難点個人感覚は配列を返すことであり、以下に様々な方法を記録する.
1.返される配列を外部で作成し、関数としての入力パラメータを変更します.関数は値を返す必要がないため、メモリリークなどの問題は発生しません.例を次に示します.
この書き方の問題は明らかです.
まず、複数の入力複数の出力を予め宣言するため、書き方が複雑である.
次に、必要な入力と出力は関数としての入力なので、混同しやすいです.
最後に、初期化されていない値が発生する場合があります.
2.構造化され、上記の関数の最初の2つの問題は構造化によって回避することができる.例を次に示します.
この書き方は相対的に上よりきれいに見え、構造化も管理しやすい.
あとはポインタの書き方もあり、あとで書きます.
1.返される配列を外部で作成し、関数としての入力パラメータを変更します.関数は値を返す必要がないため、メモリリークなどの問題は発生しません.例を次に示します.
#include
const int ArSize = 12;
void sum_and_sub(int arr1[], int arr2[], int ArSize, int sum_result[], int sub_result[]);
int main()
{
using namespace std;
int arr1[ArSize] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int arr2[ArSize] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int sum_result[ArSize], sub_result[ArSize];
sum_and_sub(arr1, arr2, ArSize, sum_result, sub_result);
for (int i = 0; i < ArSize; i++)
{
cout << sum_result[i] << " ";
};
cout << endl;
for (int i = 0; i < ArSize; i++)
{
cout << sub_result[i] << " ";
};
cout << endl;
return 0;
}
void sum_and_sub(int arr1[], int arr2[], int ArSize, int sum_result[], int sub_result[])
{
for (int i = 0; i < ArSize; i++)
{
sum_result[i] = arr1[i] + arr2[i];
sub_result[i] = arr1[i] - arr2[i];
};
}
この書き方の問題は明らかです.
まず、複数の入力複数の出力を予め宣言するため、書き方が複雑である.
次に、必要な入力と出力は関数としての入力なので、混同しやすいです.
最後に、初期化されていない値が発生する場合があります.
2.構造化され、上記の関数の最初の2つの問題は構造化によって回避することができる.例を次に示します.
#include
const int ArSize = 12;
struct Result {
int sum_result[ArSize];
int sub_result[ArSize];
Result()
{
memset(this, 0, sizeof(Result));
}
};
Result sum_and_sub(int arr1[], int arr2[], int ArSize);
using namespace std;
int main()
{
int arr1[ArSize] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int arr2[ArSize] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Result results = sum_and_sub(arr1, arr2, ArSize);
for (int i = 0; i < ArSize; i++)
{
cout << results.sum_result[i] << " ";
};
cout << endl;
for (int i = 0; i < ArSize; i++)
{
cout << results.sub_result[i] << " ";
};
cout << endl;
return 0;
}
Result sum_and_sub(int arr1[], int arr2[], int ArSize)
{
Result results;
for (int i = 0; i < ArSize; i++)
{
//cout << results.sum_result[i];
results.sum_result[i] = arr1[i] + arr2[i];
results.sub_result[i] = arr1[i] - arr2[i];
};
return results;
}
この書き方は相対的に上よりきれいに見え、構造化も管理しやすい.
あとはポインタの書き方もあり、あとで書きます.