我可以设置例如array [n + k] = array [0]吗?

时间:2014-02-18 16:14:06

标签: c++ arrays

如果我有这段代码:

#include <iostream>

using namespace std;

int main()
{
    int n, i;
    cin >> n;
    float array10[n];
    cin >> array10[i];
}

如何创建array10[n+1]并设置array10[0]的价值?

3 个答案:

答案 0 :(得分:6)

你做不到。实际上,array10[n];不是合法的C ++(即使n已初始化)。可变长度数组不是C ++特性。

使用std::vector

cin >> n;
std::vector<int> vec(n);
cin >> vec[i];

答案 1 :(得分:2)

此代码

int n, i;
float array10[n];

无效,因为C +中的数组要求它们的大小在编译时是常量表达式。 (虽然有些编译器有自己的语言扩展允许这样做。但是这段代码不符合C ++标准)如果定义了一个数组,你可能不会改变它的大小。 如果n是一个常量表达式,那么你可以编写例如

const int n = 10;
float array[n];
float array1[n + 1]

否则你有两种方法。您应该使用标准C ++容器std :: vector

例如

int n = 10;
std::vector<float> v( n );

然后你可以调整此向量的大小

v.resize( n + 1 );

或者您应该动态分配数组。例如

int n = 10;
float *array = new float[n];

然后重新分配它;

float *tmp = new float[n + 1];

std::copy( array, array + n, tmp );
delete []array;
array = tmp;

答案 2 :(得分:1)

您可以通过将array10声明为指针

来实现
cin >> n;
float* array10 = new float[n];
cin >> array10[i];
//do something
delete[] array10;