如何避免将值复制到单独的数组?

时间:2013-04-25 22:03:52

标签: c++

我有以下程序来计算数组的“部分和”。例如,如果我输入连续整数1, 1, 1, 1std::cin,我的程序会将结果计算为数组1, 2, 3, 4

#include <iostream>

int main()
{
    int orig[10], copy[10];
    std::cout << "please enter 10 numbers:" << std::endl;

    for (int i = 0; i < 10; i++)
    {
        std::cin >> orig[i];
    }

    for (int i = 0; i < 10; ++i)
    {
        int sum = 0;
        for (int k = i; k >= 0; --k)
        {
            sum += orig[k];
        }
        copy[i] = sum;
    }

    std::cout << "the ascending order is:\n" << endl;
    for (int i = 0; i < 10; ++i)
        std::cout << copy[i] << std::endl;
}

我的问题是我希望有一种方法可以在不将值复制到另一个数组的情况下执行此操作。到目前为止,我还没弄清楚如何。正如您所看到的,在上面的代码中,我有一个名为copy的整数数组,我将总和放入其中。我知道这可以使用std::vectorpartial_sum完成,但我不想使用它,因为它不允许我完全理解它是如何工作的。

有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:5)

您不需要两个嵌套的for循环。将sum的初始化移出for循环,以便在迭代sum时跟踪orig。您可以随时使用orig覆盖sum中的值。

在伪代码中:

sum = 0
for each index i in array:
  sum += array[i]
  array[i] = sum

答案 1 :(得分:1)

我知道你不想使用partial_sum,但这里简单明了:

#include <iostream>
#include <iterator>
#include <numeric>

int main()
{
    using namespace std;
    partial_sum(istream_iterator<int>(cin),
                istream_iterator<int>(),
                ostream_iterator<int>(cout, "\n"));
}

代码here

答案 2 :(得分:0)

你不能在没有存储的情况下将其打印出来吗?

sum = 0 ;
for ( int i = 0 ; i < 10 ; i++ )
{
   sum += orig[ i ] ;
   std::cout << sum << "\n" ;
}