const int c = dbb.size();
float L[c-1];
int nodes[c-1][2];
int belongs[c];
c值必須通過dbb的size才能知道具體等于多少,但是后面定義常量L[], nodes[][],belongs[] 的時候就報錯,說c值必須是一個常量值,求如何解決這個問題
uj5u.com熱心網友回復:
c的值只有在運行時才能通過呼叫dbb.size知道,因此編譯器無法在編譯時知道c的大小,也就無法給L、nodes、belong分配空間了。應該把c定義成常數,要么就用動態記憶體分配。uj5u.com熱心網友回復:
動態陣列,用指標,動態分配記憶體uj5u.com熱心網友回復:
因為C++內置的陣列下標只能支持常量或constexpr運算式,所以自己創建一個陣列或者二維陣列類模版,類似下面這樣,就可以實作動態維度:
using namespace std;
template<typename T>
class Array2D //表示二維陣列的類
{
public:
class Array1D //表示一維陣列的類
{
public:
Array1D() = default;
T& operator[](size_t index)
{
return const_cast<T&>(static_cast<const Array1D&>(*this)[index]);
}
const T& operator[](size_t index) const
{
return arr1[index];
}
auto& CreateArr1D(size_t nums)
{
arr1.reset(new T[nums]);
return arr1;
}
Array1D(const Array1D&) = delete;
Array1D& operator=(const Array1D&) = delete;
//...
private:
unique_ptr<T[]> arr1{ nullptr };
};
Array2D(size_t dim1, size_t dim2, initializer_list<T> il = {})
{
arr2.reset(new Array1D[dim1]);
for (size_t i = 0; i < dim1; i++)
arr2[i].CreateArr1D(dim2);
//initializer array value
size_t num = il.size();
if (num > 0)
{
int i = 0;
for (auto p = il.begin(); p != il.end(); ++p)
{
i++;
arr2[((i - 1) / dim2) % dim1][(i - 1) % dim2] = *p;
}
}
}
Array1D& operator[](size_t index)
{
return const_cast<Array1D&>(static_cast<const Array2D&>(*this)[index]);
}
const Array1D& operator[](size_t index) const
{
return arr2[index];
}
Array2D(const Array2D&) = delete;
Array2D& operator=(const Array2D&) = delete;
//...
private:
unique_ptr<Array1D[]> arr2{ nullptr };
};
//Test:
int main()
{
int x = 3;
int y = 5;
Array2D<int> p(x, y);
p[0][0] = 100;
p[2][4] = 200;
cout << p[0][0] << " " << p[2][4] << endl;
Array2D<int> p2(x, y, {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15});//傳入初始值
cout << p2[0][0] << " " << p2[2][4] << endl;
x = y = 2;
Array2D<string> s(x, y, {"abc","def"});
cout << s[0][0] << " " << s[0][1] << " " << s[1][0] << " " << s[1][1] << endl;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/189752.html
標籤:C++ 語言
上一篇:C語言小學生乘法測驗
下一篇:資料結構 順序表的按值查找問題
