如果我有這樣的代碼:我可以設置例如數組[n + k] = array [0]?
#include <iostream>
using namespace std;
int main()
{
int n, i;
cin >> n;
float array10[n];
cin >> array10[i];
}
如何我可以創建array10[n+1]
並設置array10[0]
價值?
如果我有這樣的代碼:我可以設置例如數組[n + k] = array [0]?
#include <iostream>
using namespace std;
int main()
{
int n, i;
cin >> n;
float array10[n];
cin >> array10[i];
}
如何我可以創建array10[n+1]
並設置array10[0]
價值?
你不能。實際上,array10[n];
不是合法的C++(即使n
已初始化)。可變長度數組不是C++功能。
使用std::vector
:
cin >> n;
std::vector<int> vec(n);
cin >> vec[i];
此代碼
int n, i;
float array10[n];
是無效的,因爲在C數組+要求它們的尺寸將是在編譯時間常數表達式。 (雖然有些編譯器有自己的語言擴展,但是這些代碼不符合C++標準)。如果定義了一個數組,你可能不會改變它的大小。 如果n是一個常量表達式,那麼你可以寫例如
const int n = 10;
float array[n];
float array1[n + 1]
否則,你有兩種方法。要麼應該使用標準的C++容器的std ::矢量
例如
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;
可以通過聲明array10爲指針
cin >> n;
float* array10 = new float[n];
cin >> array10[i];
//do something
delete[] array10;
並記住稍後刪除它? – doctorlove
@ k4rlsson ...然後請做到正確! –
這是ub。你是不是指'delete []'?提示 - 這就是爲什麼你更喜歡std :: vector。 –
有趣的是這不是在語言做到這一點。它在鏗鏘聲中編譯得很好。 – Kevin
@Kevin編譯器擴展。 –
他可以改用'new'做一個動態分配。 – Mauren