假设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
答案 0 :(得分:1)
使用矢量将是一个很好的解决方案。 在向量中,您甚至不需要担心新条目 - 分配(以及稍后删除),因为向量将在您不知情的情况下处理它。 而且它提供了许多选项而不是常规数组。
答案 1 :(得分:0)
使用std::vector
或std::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;
}
}
}