gpt4 book ai didi

C++关于堆栈上的动态数组

转载 作者:太空狗 更新时间:2023-10-29 20:05:08 24 4
gpt4 key购买 nike

据我所知,C++/C 不支持堆栈上的动态数组。在以下声明中:

int data[n] ; // if the n is not decided at compiling time ,this leads to error

但是最近,我读到一些其他人的代码如下:

//**
It seems the n number can not be decided at compling time,but when I run it , if i fprintf the formation, each time i got the correct array size !!!!!!
the G++ version is 4.7.1
Is this because the G++ 4.7.1 support C++11 x which allow dynamic array?
**//

#include <cstdio>
#include <algorithm>
using namespace std;

#include <stdio.h>

char s[31];

int Hash()
{
int sum=0;
for(int i=0,k=0;k<7;i++)
{
if(s[i]>='0'&&s[i]<='9')
{
sum*=10;k++;
sum+=(s[i]-'0');
}
else if(s[i]>='A'&&s[i]<'Z')
{
sum*=10;k++;
sum+=((s[i]-'A'-(s[i]>'Q'))/3+2);
}
}
return sum;
}

int main()
{

int n;scanf("%d",&n);
int data[n];getchar();
//fprintf(stderr,"size is %d\n",sizeof(data)/sizeof(data[0]));
//**
It seems the n number can not be decided at compling time,but when I run it , if i fprintf the formation, each time i got the correct array size !!!!!!
*//
for(int tmp=0;tmp<n;tmp++)
{
gets(s);
data[tmp]=Hash();
}
sort(data,data+n);
bool p=false;n--;
for(int i=0,num=1;i<n;i+=num=1)
{
while(data[i]==data[i+1])
{
num++;
i++;
}
if(num>1)
{
printf("%03d-%04d %d\n",data[i]/10000,data[i]%10000,num);
p=true;
}
}
if(!p)printf("No duplicates.\n");
return 0;
}

最佳答案

这些被称为 variable length arrays (VLA) 并且是一个 g++ 编译器扩展,它不是 C++ 标准的一部分。如果您希望代码可移植,请不要在 C++ 中使用它。

您可以使用 -Wvla 编译标志让 g++ 发出警告,或者使用标志 -Werror=vla 发出错误。我通常使用 -pedantic-errors 进行编译,它会捕获这个和许多其他与标准的偏差。

关于C++关于堆栈上的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15085006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com