相关疑难解决方法(0)

508
推荐指数
8
解决办法
5万
查看次数

'new' 和 'delete' 在 C++ 中被弃用了吗?

我偶然发现了一个涉及不同大小数组声明的测验。我想到的第一件事是我需要对new命令使用动态分配,如下所示:

while(T--) {
   int N;
   cin >> N;
   int *array = new int[N];
   // Do something with 'array'
   delete[] array;
}
Run Code Online (Sandbox Code Playgroud)

但是,我看到其中一种解决方案允许以下情况:

while(T--) {
    int N;
    cin >> N;
    int array[N];
    // Do something with 'array'
}
Run Code Online (Sandbox Code Playgroud)

经过一番研究,我读到 g++ 允许这样做,但它让我一直在思考,在哪些情况下有必要使用动态分配?还是编译器将其翻译为动态分配?

包括删除功能。但是请注意,这里的问题与内存泄漏无关。

c++ arrays dynamic-memory-allocation static-memory-allocation

68
推荐指数
4
解决办法
2万
查看次数

"int size = 10;" 产生一个恒定的表达?

以下代码在gcc 4.8和Clang 3.2下编译:

int main()
{
  int size = 10;
  int arr[size];
}
Run Code Online (Sandbox Code Playgroud)

C++标准的8.3.4/1表示数组的大小必须是一个整数常量表达式,这size似乎不是.这是两个编译器中的错误,还是我错过了什么?

最新的VC++ CTP用这个有趣的消息拒绝代码:

error C2466: cannot allocate an array of constant size 0
Run Code Online (Sandbox Code Playgroud)

有趣的是,它似乎认为size是零.但至少它拒绝了代码.gcc和Clang应该不一样吗?

c++ arrays compile-time-constant variable-length-array c++11

13
推荐指数
1
解决办法
1209
查看次数

在C++书籍中,数组绑定必须是常量表达式,但为什么以下代码有效?

#include <iostream>
using namespace std;

int main(){
    int n=10;
    int a[n];

    for (int i=0; i<n; i++) {
        a[i]=i+1;
        cout<<a[i]<<endl;
}
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在Mac下的Xcode4中运行良好

如书中所说,这应该是错的,为什么?

好糊涂〜

c++

9
推荐指数
2
解决办法
769
查看次数

在C ++中用用户输入初始化数组大小的不同方法是什么

我想知道在c ++中执行以下代码段的一些替代方法。

int i;
cin >> i;
int arr[i];
Run Code Online (Sandbox Code Playgroud)

我最近开始研究竞争性编程并尝试学习更多。

编辑:对于那些不是cpp的评论。它使用我正在使用的类中正在使用的makefile成功编译,gcc -std=c++11 -o a.exe main.cpp并在输入长度为1时返回到控制台

array length: 1
Run Code Online (Sandbox Code Playgroud)

c++ arrays gcc stl c++11

2
推荐指数
1
解决办法
200
查看次数

与临时变量的交换不会给出任何输出,但 swap() 会给出所需的输出。由 小码哥发布于

与临时变量的交换没有给出任何输出,但 swap() 给出了所需的输出。我正在尝试将 arr[i] 与 arr[arr[i]+1] 交换。

这段代码给出了所需的输出

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin>>n;
    int arr[n],i,temp;
    for(i=0;i<n;i++) {
        cin>>arr[i];
    }
    for(i=0;i<n;i++) {
        swap(arr[i],arr[arr[i]+1]);
    }
    for(i=0;i<n;i++) {
        cout<<arr[i]<<" ";
    }
}
Run Code Online (Sandbox Code Playgroud)

但对于 temp 变量,没有输出。代码如下

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin>>n;
    int arr[n],i,temp;
    for(i=0;i<n;i++) {
        cin>>arr[i];
    }
    for(i=0;i<n;i++) {
        temp=arr[i];
        arr[i]=arr[arr[i]+1];
        arr[arr[i]+1]=temp;
    }
    for(i=0;i<n;i++) {
        cout<<arr[i]<<" ";
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题。我希望很快能得到答复。谢谢你!

c++ swap temp

2
推荐指数
1
解决办法
454
查看次数

我可以写字符数组 ch[n] 而不是 ch[10]

在我的 C++ 代码中,我想写字符数组 s[n] 而不是写 s[10]。其中 n 是 size 是数组,它由用户在运行时给出。但它不接受输入。它只取 n,而不是字符串。

我得到了这样的输出,

输入尺寸:10

输入字符串:

细绳 :

    #include<iostream>
    #include<cstring>
    using namespace std;

    int main()
    {
       int n;
       cout<<"Enter size : ";
       cin>>n;
       char s[n];
       cout<<"Enter String : \n";
       cin.getline(s,n);
       cout<<"String : \n";
       int l=strlen(s);
       cout.write(s,l);
       return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
78
查看次数