2011-10-20 10 views
0

私はC++にはかなり新しいですが、いくつかの他の言語に精通しています。 Java ArrayList、Objective-c NSMutableArrayまたはPython配列に似たデータ型をC++で使用したいと考えています。私が求めているのは、容量を持たない配列を初期化して(アイテムを徐々に追加できるようにする)、複数のデータ型を1つの配列に格納する機能です。C++可変マルチペア配列

テーブルのフィールド数を知らずに、このデータを移動できるようにするために、mysql dbの異なるテーブルからデータを読み込むことをお勧めします。文字列の配列は、(比較的小さい)サイズは1から20まで、異なるサイズを有することができる

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

:私の理想的なデータタイプは、私はこのような何かを格納することが可能になります。

これが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++での動的サイズの配列の標準はのstd ::ベクトルである<>。間接参照を導入しない限り、同種のコンテナは存在しません。このため、必要に応じて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. ブーストライブラリのstd::vector<boost::any>のようなものを使用します(ただし、C++を初めて使用していることに気が付いています。

実際には、最初に「配列」に無関係な「型」を保存する理由は何ですか?彼らが関連している場合は、 "どのように"?これは "タイプ"のためのまともな "Base_type"のdesginingであなたを導くでしょう。

最後に、要するに、C++には、無関係なデータ型を含むことができる均質な配列のような構造はありません。