C++ 我可以将数组的大小放在声明之后吗?
我尝试了很多东西,因为我是大学一年级新生,可能有一些信息可以突破我的限制。。 N 主要问题是向计算机D编写一个程序,其中D=∑ i=1(Ai-Bi),注意A和B是一维数组 我试过这个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];
<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];