int型やchar型など、2種類以上の値を格納できるC++コンテナはありますか?私はブラックジャックの試合をしたい。デッキはintとcharの両方で構成されていなければなりません。私はちょうど数字でそれを初期化したくない(それについて何も言わないで!)。私は非常に初心者プログラマーですので、あまりにも複雑にしないでください。2種類のコンテナ
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、Boost、Tuples、Pairsについての話は素晴らしいですが、初心者は初心者向けのソリューションが必要です。 –
あなたは、同時にすべての値を使用したい場合、あなたはこのようなものを使用することができます...
std::pair<int,char> twovals;
std::pair<int,std::pair<char,float> > threevals;
私はあなたがint型や文字のいずれかを記憶することが可能であるコンテナが必要であることを仮定しています。
まず、のboost::any
データ型を調べてみましょう。その後、boost::any
インスタンスのコンテナを作成できます。
あなたはboost
を使用したくないか、それはやり過ぎと思われる、次のようにunion
を使用する場合:
typedef struct {
char type;
union {
char character;
int integer;
};
} my_struct;
組合でcharacter
とinteger
フィールドの内容が同じメモリスロットを占有します。 (文字は通常1バイトだけなので、integer
はさらに多くのスロットを使用します)。文字を格納する場合は'c'
、構造体のtype
フィールドを設定し、整数を格納する場合は'i'
とし、character
またはinteger
フィールドを使用して構造体の内容にアクセスしますtype
の値によって異なります。
最後にQtのQVariantデータ型もあります。これは上記の2番目のアプローチと同様に機能します。
intとcharを同時に格納する必要があります。 – Gabe
ブーストタプルオブジェクトを使用できます。 詳細情報:構造体:あなたは初心者のでhttp://www.boost.org/doc/libs/1_46_1/libs/tuple/doc/tuple_users_guide.html#using_library
また、あなただけの基本的なものを使用し、Boost.Variant
intとcharを一緒に保存したいのですか、intやcharをコンテナに追加したり削除したりできますか?前者の場合、intとcharの構造体を格納するだけです。後者の場合、私が知っている唯一のことは、ポインターはすべて1つのサイズなので、ポインターとタイプをポインターとともに保管することです。 –