【问题标题】:change argument inside method更改方法内的参数
【发布时间】:2013-04-23 14:23:31
【问题描述】:

是否可以在方法内部更改参数?

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

我想对数组 _num 和 _num2 使用相同的方法。 谢谢!

【问题讨论】:

  • 这两个数组是什么类型的?

标签: c++ methods arguments


【解决方案1】:

作为替代方案,请考虑改用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&lt;int&gt;),那么:

int result = *(std::max_element(_num.begin(), _num.end()));

如果您确实想自己滚动,那么您需要做的就是传递某种类型的引用或指向数组的指针,具体取决于它是什么类型。假设这些成员变量是向量 (std::vector&lt;int&gt;)。一种这样的实现可能是:

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;
}

(假设向量至少有五个元素。我不建议使用此代码,因为它容易受到越界情况的影响。)

【讨论】:

  • 如果你有C++11,可以泛化为std::begin(_num)std::end(_num)
【解决方案2】:

是的,可以对不同的数组使用相同的方法。您需要将数组作为参数传递给您的方法:

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;
}

然后用不同的参数调用它两次:

 int max1 = max(_num, size_of_num);
 int max2 = max(_num2, size_of_num2);

【讨论】:

  • 我认为_num 是一个成员变量。不过不清楚他在问什么。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多