2011-10-20 45 views
0

我對C++很陌生,但熟悉其他一些語言。 我想使用類似於Java ArrayList,Objective-c NSMutableArray或Python數組的數據類型,但使用C++。我正在尋找的特性是可以在沒有容量的情況下初始化數組(以便能夠逐漸添加項目)以及將多個數據類型存儲在一個數組中的功能。C++可變多位數組

爲了讓你知道我希望它的細節是從不同的表中讀取數據,不知道表中的字段數,並且能夠移動這些數據。我理想中的數據類型,讓我來存儲這樣的事情:

idealArray = [Bool error,[string array],[string array]]; 

其中字符串數組可以有不同的尺寸,從1到20的尺寸(比較小)。

我不知道這是否可能在C++中,任何幫助表示讚賞,或鏈接到良好的資源。

由於

回答

0

您可以使用結構或類,以存儲(命名)多種數據類型一起如:

class Record 
{ 
    bool _error; 
    vector<string> _v1; 
    vector<string> _v2; 
}; 
vector<Record> vec; 

或std ::元組來存儲(未命名)多種數據類型,例如

vector<tuple<bool, vector<string>, vector<string> > > vec; 
2

在C++標準動態大小的數組是標準::矢量<>。除非您引入間接引擎,否則不存在同類容器,因此您可以根據需要使用boost :: variant或boost :: any。

1

您可以嘗試使用std::vector<boost::any>(文檔here)。

+0

或boost :: variant如果列表有限。 –

1

我建議使用STL的std :: vector。但是請注意,C++沒有可以包含多種數據類型的容器。有多種方法可以模擬此行爲:

  1. 從某個「Base_type」派生出所有要存儲的「類型」。然後將這些項存儲在向量中作爲std::vector<Base_type*>,但是如果「類型」完全不同,那麼您需要知道哪個項目在哪裏以及類型爲(動態)投射到哪裏。
  2. 從boost庫中使用類似std::vector<boost::any>的東西(但注意到你是C++的新手,可能是矯枉過正)。

事實上,你需要問的問題是,爲什麼你要在一個「數組」中首先存儲不相關的「類型」?如果它們是相關的,那麼「如何」?這將指導你爲「類型」設計一個像樣的「Base_type」。最後,簡而言之,C++沒有可以包含不相關數據類型的同類數組結構。