【发布时间】:2021-10-29 10:25:06
【问题描述】:
我为算法问题写了一个问题。我是 C++ 新手,当我尝试运行我的代码时收到以下错误消息:“数组初始化程序必须是初始化程序列表”。这是代码本身:
#include <iostream>
#include <algorithm>
#include <array>
using namespace std;
int main(){
int n;
cin>>n;
int a[n][2];
int b[n];
for(int i=0;i<n;i++){
cin>>a[i][0];a[i][1]=i;
b[i]=a[i][0];
}
sort(a,a+n);
for(int i=1;i<n;i++)
{
if(a[i][0]<=a[i-1][0]){
a[i][0]=a[i-1][i]+1;
b[i]=a[i-1][i]+1;
}
}
for(int i=0;i<n;i++)
cout<<b[i]<<" ";
}
我不知道为什么会收到此错误消息。我用谷歌搜索了它,找不到任何有用的东西。如果有人可以向我解释为什么我会收到此消息以及如何解决它,我将不胜感激。提前致谢。
【问题讨论】:
-
将
std::array与排序函子一起使用。 -
报错在哪一行?可变长度数组,例如
int a[n][2];是编译器扩展,可能不适用于您使用的编译器。看看这里 - 直播 - godbolt.org/z/vePbT5GMT -
C++ stackoverflow.com/questions/39334435/… 中不允许使用 VLA,这可能是问题所在(尽管错误消息似乎有点奇怪)
-
对于那些想知道的人,触发错误的是
sort(a,a+n);行。因为你怎么知道int[2]是否在另一个int[2]之前排序? -
错误消息(我可以重现)来自这个排序调用:
sort(a,a+n);看起来库函数很难从指针算术初始化迭代器。