如何在c ++中定义未知大小的数组?

时间:2017-05-31 05:47:31

标签: c++

假设a_1已知且 a_2,...,a_q 可以通过 a_k = a_ {k-1} + f递归计算(k) ,其中 f(k) k 的某些功能。

然而q是最小数字, a_1 + \ sum_ {k = 2} ^ q f(k)> = 1000 且未知。

我想使用c ++找到 a_2,...,a_q 。一个直截了当的方法是首先找到 q ;然后初始化一个大小 q 的数组,并将值存储到数组中,如下所示。

然而,我觉得它计算两次f(k)并且浪费资源。有什么办法可以在c ++中初始化一个未知大小的数组并在一个循环中解决它?

Toolbar

2 个答案:

答案 0 :(得分:1)

使用矢量将是一个很好的解决方案。 在向量中,您甚至不需要担心新条目 - 分配(以及稍后删除),因为向量将在您不知情的情况下处理它。 而且它提供了许多选项而不是常规数组。

答案 1 :(得分:0)

使用std::vectorstd::unique_ptr<int[]>

请参阅嵌入式评论:

#include <vector>
#include <memory>

int some_equation(int k) { return 0; }

void test(int a_1)
{
  //find the max ***q*** first       
  int k=1;
  int sum=a_1;
  while(sum < 1000){
        int inc = some_equation(k);
        sum += inc;
        k++;

    //
    // 2 alternate methods - you should normally prefer the std::vector approach
    //
    auto array = std::vector<int>(k-1);   // should this be k-1? don't you need k elements?
//    auto array = std::make_unique<int[]>(k-1);

    int sum=a_1;
    for(int h=0; h<k; h++){
        int inc = some_equation(k);  // repeated computation
        sum += inc;
        array[h]=sum;
    } 
  }
}