メソッド内で引数を変更することはできますか?
int NumSet::max()
{
int i, temp=1;
for (i=0;i<5;i++)
{
if (_num[i]>temp) temp=_num[i];
}
return temp;
}
配列_numと_num2としましょう。ありがとう!
std::max_element()
代わりに、シーケンス内の最大の要素を見つけるための標準ライブラリ アルゴリズムである代わりに使用することを検討してください。標準ライブラリの機能を使用してコードの重複を避けることは、通常は良い考えです。独自のアルゴリズムを展開すると、バグが発生する絶好の機会が提供されます。また、標準ライブラリを使用すると、コードがより表現力豊かになり、読みやすくなります (したがって、保守も容易になります)。
_num
と_num2
が配列 ( ) の場合、次のint[]
ように実行できます。
// Consider replacing the magic number 5 with a symbolic constant or variable.
int result = *(std::max_element(_num, _num + 5));
それらがある種の STL コンテナー ( などstd::vector<int>
) である場合、次のようになります。
int result = *(std::max_element(_num.begin(), _num.end()));
自分でロールしたい場合は、配列の種類に応じて、配列への参照またはポインターを渡すだけです。これらのメンバー変数がベクトル ( ) であると仮定しましょうstd::vector<int>
。そのような実装の 1 つが次のようになります。
int NumSet::max(std::vector<int> const & sequence)
{
int i, temp=1;
for (i=0;i<5;i++)
{
if (sequence[i]>temp) temp=sequence[i];
}
return temp;
}
(これは、ベクトルに少なくとも 5 つの要素があることを前提としています。範囲外の状態になりやすいため、このコードの使用はお勧めしません。)
はい、異なる配列に対して同じ方法を使用することは可能です。配列を引数としてメソッドに渡す必要があります。
int NumSet::max(int* num, size_t n)
{
if(n == 0) // if array is empty
return 0; // or something different
int i, temp= num[0];
for (i=1;i<n;i++)
{
if (num[i]>temp) temp = num[i];
}
return temp;
}
次に、異なる引数で 2 回呼び出します。
int max1 = max(_num, size_of_num);
int max2 = max(_num2, size_of_num2);