例如,啟動程式后,我指定數字4,而我的struct中只有4個變數——x1、x2、x3、x4。如果我下次啟動程式時輸入2,我將只有x1、x2。這甚至可能嗎?
uj5u.com熱心網友回復:
您可以在編譯時選擇結構的成員數量,并且通過模板專業化,您甚至可以將它們命名為x1, x2,...
template <unsigned N>
struct foo;
template <>
struct foo<2> {
int x1;
int x2;
};
template <>
struct foo<4> {
int x1;
int x2;
int x3;
int x4;
};
現在foo<2>有成員x1和x2并且foo<4>有成員x1、x2、x3和x4。但是,您只能在編譯時在foo<2>和之間foo<4>進行選擇。此外,以上有點傻。沒有人會真正撰寫那樣的代碼。
在運行時,您將不得不求助于運行時多型性,但我也懷疑這是否是練習要求您做的。
每當您想命名變數時x1, , x2, x3, ... 那么您實際上想要一個陣列或向量:
struct bar {
std::vector<int> data;
bar(unsigned size) : data{size} {}
};
現在bar b2{2};持有 2 個元素,同時bar b4{4};持有 4 個元素。
uj5u.com熱心網友回復:
你不能在 C 中擁有它。我能想到的最接近的事情是使用 std::map。例如,這是實作此目的的示例代碼:
std::map<int, int> variables;
int numberOfVariables;
std::cin >> numberOfVariables;
for (int i = 1; i <= numberOfVariables; i )
variables[i] = SOME_VALUE;
通過使用地圖,您可以i使用variables[i].
我建議閱讀地圖(和其他 C 容器)以更好地了解您可以做什么和不可以做什么。cppreference是一個很好的來源。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392272.html
標籤:C
上一篇:無法訪問或顯示回傳的“字串”
