是否可以同時存儲所有的int
,string
和float
?我已經看到了一些數組語法,但都以int array[]
或string array[]
開頭,有沒有一種數組可以存儲各種基元和字符串值的方法?C++,如何將字符串,整型值和浮點值存儲到數組中並取回存儲的值
我不是很熟悉C++,但在java中有一個迭代器,它可以幫助您將這些存儲的值滾出並允許顯示那裏存儲的內容。 C++是否也有這個功能?
是否可以同時存儲所有的int
,string
和float
?我已經看到了一些數組語法,但都以int array[]
或string array[]
開頭,有沒有一種數組可以存儲各種基元和字符串值的方法?C++,如何將字符串,整型值和浮點值存儲到數組中並取回存儲的值
我不是很熟悉C++,但在java中有一個迭代器,它可以幫助您將這些存儲的值滾出並允許顯示那裏存儲的內容。 C++是否也有這個功能?
對於基本類型,這很容易:它們可以混合到union
,http://www.cplusplus.com/doc/tutorial/other_data_types/( - > Unions)。
對於複雜類型,如string
,它會變得更加困難。
你可能想看看boost::variant
,http://www.boost.org/doc/libs/1_36_0/doc/html/variant.html或boost::any
http://www.boost.org/doc/libs/1_51_0/doc/html/any.html
'boost :: variant'是可取的,因爲他們知道他們想要存儲的所有類型? –
C++現在允許在一個聯合中使用非POD類型(使用C++ 11)。 std :: string會起作用,當然還需要一些額外的工作來正確管理聯合成員對象的生命週期。 OTOH boost :: variant已經爲你做了所有的工作。 – bames53
@ bames53謝謝!不知道。從來沒有過C++ 11!多可恥! –
如果這些值是相關的,然後創建一個結構和存儲,而不是個別值。例如:
struct person {
string name;
int age;
};
person pArray[];
偉大的答案,如果你不關心內存佔用。你還可以在運行時添加一個類型標識符enum {IS_FLOAT,IS_STRING,...}來標識類型。 –
他們如何知道使用哪個價值? 'boost :: optional'可能有幫助嗎? –
@RudolfMühlbauer:我不認爲他在推薦一個類似於工會的東西,他實際上建議重新考慮將多個對象放在一個數組中的方式(作爲對象) –
@amit,指針顯然是可能的。我的經驗表明,算法可能會變得非常困難(記憶方式)。和:RTTI會變得麻煩。 –
我知道這不是很有用,但爲什麼你需要這樣做?有一個陣列上有幾種類型可能會很混亂。你可以嘗試以不同方式建模你的解決方案嗎 – leo
使用'std :: vector'比使用數組更具慣用(並且可維護)。 –