0

メソッド内で引数を変更することはできますか?

int NumSet::max()
{
    int i, temp=1;
    for (i=0;i<5;i++)
    {
        if (_num[i]>temp) temp=_num[i];
    }
    return temp;
}

配列_numと_num2としましょう。ありがとう!

4

2 に答える 2

2

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 つの要素があることを前提としています。範囲外の状態になりやすいため、このコードの使用はお勧めしません。)

于 2013-04-29T19:41:11.170 に答える
0

はい、異なる配列に対して同じ方法を使用することは可能です。配列を引数としてメソッドに渡す必要があります。

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);
于 2013-04-29T19:39:15.550 に答える