C++で関数を複数の配列に戻す方法

2305 ワード

python回転c++最大難点個人感覚は配列を返すことであり、以下に様々な方法を記録する.
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;
}

この書き方は相対的に上よりきれいに見え、構造化も管理しやすい.
あとはポインタの書き方もあり、あとで書きます.