Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以将数组的大小放在声明之后吗?_C++ - Fatal编程技术网

C++ 我可以将数组的大小放在声明之后吗?

C++ 我可以将数组的大小放在声明之后吗?,c++,C++,我尝试了很多东西,因为我是大学一年级新生,可能有一些信息可以突破我的限制。。 N 主要问题是向计算机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];

我尝试了很多东西,因为我是大学一年级新生,可能有一些信息可以突破我的限制。。 N 主要问题是向计算机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];

main()
{
int N;
cin>>N;
int a[N];
int b[N];
对于(i=1;i>a[i]>>b[i];

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

您不能用运行时值声明静态数组。您需要动态分配它们,如:

int* a = new int[N];
别忘了在最后把钱还给我

delete [] a;

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

int *a = new int[N];
使用向量:

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

最后一个不是标准行为,因此最好不要尝试,而只是为了好玩和降低代码的可读性。

如果不能使用变量声明数组的大小,请尝试使用指针。例如:

    int *p = new int [N] 

如果执行
inta[N]
,数组将在编译时分配。在这种情况下,
N
必须有一个常量值,这在这里不是真的

您需要按如下方式动态创建这些阵列:

int *a = new int[N];
int *b = new int[N];
或者使用
向量

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

您不能在运行时输入数组的大小,而是使用
向量
或尝试使用
新建
删除
来创建自己的动态数组实现

 int size ; 
 cin>> size ; 
 int arr[size] ; // wrong, size must be known beforehand. 
*解决方案1*

*解决方案3*

你可以

#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];
}
intn;
cin>>N;
向量a(N);
载体b(N);
对于(i=1;i>a[i]>>b[i];
}

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

#include <iostream>

int main()
{
    int total = 0;

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

    std::cout << "D = " << total << "\n";
}
#包括
int main()
{
int-total=0;
对于(int a,b;std::cin>>a>>b;)
{
总数+=a-b;
}
std::cout您可以尝试以下方法:

int N;
cin>>N;
int a[] = new int[N];
int b[] = new int[N];
它比使用指针和向量的版本更简单


注意:从索引0开始总是比从1开始更好,因为不是所有的编译器都会接受这一点。

多亏了所有帮助我的人,我们在研究中还没有真正实现新的函数,但在你告诉我之后,我查阅了它,它更清楚地说明了数组是如何工作的。。 我用了不同的方法,比如首先将大小声明为常量 然后是vector、new和delete函数。。
非常感谢,

是的,使用一个代码> STD::向量。最后一个例子不会编译在一个标准兼容的C++编译器上。它是一个VLA。它在DeVC++4.92.2上工作得很好。如果你能解释“VLA”的意思,那就太好了,因为我只找到了一些带有捷径+荷兰食品的本地东西。DevC++使用了一些g++version.VLA-可变长度数组。它是一个非标准扩展(最明显的是在gcc中)-但由于它是非标准的,所以不可依赖。感谢您的澄清。它在一开始看起来非常奇特,但在工作后添加了它。我将稍微编辑一下文章。
  //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. 
#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];
}
#include <iostream>

int main()
{
    int total = 0;

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

    std::cout << "D = " << total << "\n";
}
int N;
cin>>N;
int a[] = new int[N];
int b[] = new int[N];