我可以在声明后放入数组的大小吗?

时间:2014-02-09 04:14:56

标签: c++

我尝试了很多东西,因为我是大学新生,可能会有一些信息可以打破我的限制..                                                                      ñ 主要问题是将程序写入计算机D,其中D =Σi= 1(Ai-Bi),注意A和B是一维数组。

我试过这个

<iostream>

main()
{
    int N;
    cin>>N;

    int a[N];
    int b[N];

    for (i=1; i<=N;i++)
    {
        cin>> a[i]>> b[i];

但我意识到没有这样的事情,我想使用谁想要帮助的知识,如果这是问题的作者的错误?

9 个答案:

答案 0 :(得分:4)

如果执行int a[N],则将在编译时分配数组。并且,在这种情况下,N必须具有常量值,这在此不正确。

您需要动态创建这些数组,如下所示:

int *a = new int[N];
int *b = new int[N];

或者改为使用vector<int>

vector<int> a(N);
vector<int> b(N);

已编辑:您的代码的另一个问题是您将从索引处开始的数组视为1,实际上为0。您需要将for条件更改为:

for (i=0; i<N; i++)

答案 1 :(得分:2)

您的问题可以通过单程算法解决,该算法甚至根本不需要存储任何值,例如:

#include <iostream>

int main()
{
    int total = 0;

    for (int a, b; std::cin >> a >> b; )
    {
        total += a - b;
    }

    std::cout << "D = " << total << "\n";
}

这将尽可能长地从标准输入中读取整数对,例如直到你关闭输入流或输入无法解析的内容。

答案 2 :(得分:1)

您无法使用运行时值声明静态数组。您需要动态分配它们:

int* a = new int[N];

不要忘记在最后解除分配

delete [] a;

答案 3 :(得分:1)

需要在运行时知道数组大小。因此 - 理论上你不能以你想要的方式做你想做的事。但是,您可以使用new运算符:

int *a = new int[N];

使用矢量:

#include <vector>
std::vector<int> a;

或使用一个小技巧:

int N;
cin>>N;
const int M=N;
int a[M];

最后一个不是标准行为,但是最好不要尝试,除了有趣和使代码不易阅读。

答案 4 :(得分:1)

您无法使用变量声明数组的大小,请尝试使用指针。像:

    int *p = new int [N] 

答案 5 :(得分:1)

您无法在运行时输入数组的大小,而是使用vector或尝试使用newdelete来创建自己的动态数组实现。

 int size ; 
 cin>> size ; 
 int arr[size] ; // wrong, size must be known beforehand. 

* Solution1 *

Use a vector<int> instead. 

* Solution2 *

  int size; 
  cin>>size ; 
  int * ptr = new int[size] ; 

* Solution3 *

  //declare a maxSize(maximum limit that you think your array will not exceed) 
  // a bit memory inefficient 
  const int MAXSIZE = 20 ; 
  int arr[MAXSIZE] ;  
   // now  use this array. 

答案 6 :(得分:0)

你可以做到

#include <vector>

然后在你的函数中:

int N;
cin >> N;
vector<int> a(N);
vector<int> b(N);
for (i=1; i<=N;i++)
     cin >> a[i]>> b[i];
}

答案 7 :(得分:0)

你可以试试这个:

int N;
cin>>N;
int a[] = new int[N];
int b[] = new int[N];

它比使用指针和放大器的版本更简单。载体

注意:它始终是从索引0开始而不是从1开始的更好方法,因为并非所有编译器都会接受它。

答案 8 :(得分:0)

感谢所有帮助过我的人,我们实际上还没有在我们的研究中找到新的功能,但是在你告诉我之后我查了一下,它更清楚地说明阵列是如何工作的...... 我以不同的方式做到了,比如首先将大小声明为常量 然后是vector,new和delete函数.. 非常感谢