2011-05-08 21 views
2

int型やchar型など、2種類以上の値を格納できるC++コンテナはありますか?私はブラックジャックの試合をしたい。デッキはintとcharの両方で構成されていなければなりません。私はちょうど数字でそれを初期化したくない(それについて何も言わないで!)。私は非常に初心者プログラマーですので、あまりにも複雑にしないでください。2種類のコンテナ

+2

intとcharを一緒に保存したいのですか、intやcharをコンテナに追加したり削除したりできますか?前者の場合、intとcharの構造体を格納するだけです。後者の場合、私が知っている唯一のことは、ポインターはすべて1つのサイズなので、ポインターとタイプをポインターとともに保管することです。 –

答えて

2

を使用することができます。あなたは出力がon Ideoneを生きる見ることができます

myvec[0], cval: S, ival: 42 
myvec[1], cval: A, ival: 1337 
myvec[2], cval: X, ival: 314159 

:出力

#include <vector> 
#include <iostream> 

struct MyStruct{ 
    char cval; 
    int ival; 
}; 

int main(){ 
    using namespace std; 

    vector<MyStruct> myvec; 
    MyStruct values; 

    values.cval = 'S'; 
    values.ival = 42; 
    myvec.push_back(values); 

    values.cval = 'A'; 
    values.ival = 1337; 
    myvec.push_back(values); 

    values.cval = 'X'; 
    values.ival = 314159; 
    myvec.push_back(values); 

    for(int i=0; i < myvec.size(); ++i) 
    cout << "myvec[" << i << "], cval: " << myvec[i].cval << ", ival: " << myvec[i].ival << "\n"; 
} 

+1

+1、Boost、Tuples、Pairsについての話は素晴らしいですが、初心者は初心者向けのソリューションが必要です。 –

0

struct、class、またはstd ::のペアを使用して、さまざまな型を複合型にグループ化し、適切なSTLコンテナを使用します。

+0

またはクラス、マップ、または共用体。 – Beta

+0

はint型とchar型のデータメンバーを持つクラスのようですか? – Gabe

2

あなたは、同時にすべての値を使用したい場合、あなたはこのようなものを使用することができます...

std::pair<int,char> twovals; 
std::pair<int,std::pair<char,float> > threevals; 
5

私はあなたがint型や文字のいずれかを記憶することが可能であるコンテナが必要であることを仮定しています。

まず、のboost::anyデータ型を調べてみましょう。その後、boost::anyインスタンスのコンテナを作成できます。

あなたはboostを使用したくないか、それはやり過ぎと思われる、次のようにunionを使用する場合:

typedef struct { 
    char type; 
    union { 
     char character; 
     int integer; 
    }; 
} my_struct; 

組合でcharacterintegerフィールドの内容が同じメモリスロットを占有します。 (文字は通常1バイトだけなので、integerはさらに多くのスロットを使用します)。文字を格納する場合は'c'、構造体のtypeフィールドを設定し、整数を格納する場合は'i'とし、characterまたはintegerフィールドを使用して構造体の内容にアクセスしますtypeの値によって異なります。

最後にQtのQVariantデータ型もあります。これは上記の2番目のアプローチと同様に機能します。

+0

intとcharを同時に格納する必要があります。 – Gabe