容器2种类型

时间:2011-05-08 15:24:52

标签: c++ containers

是否有任何C ++容器可以存储2种(或更多)类型的值,例如int和chars?我想做一个二十一点游戏。甲板必须包括整数和字符。我不想用数字来初始化它(所以不要说任何事情!)。我是非常初学程序员,所以不要太复杂。

6 个答案:

答案 0 :(得分:5)

我假设您需要一个能够存储整数或字符的容器。

首先,查看Boost中的boost::any数据类型,这可能有所帮助。然后,您可以创建boost::any个实例的容器。

如果您不想使用boost或似乎有点矫枉过正,请按以下方式使用union

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

然后,联合中的characterinteger字段的内容占用相同的内存插槽。 (好吧,integer使用更多的插槽,因为字符通常只有一个字节)。然后由您决定将结构的type字段设置为'c',如果您存储一个字符,并设置为'i'来存储整数,然后访问使用characterinteger字段的结构内容取决于type的值。

最后,还有Qt的QVariant数据类型,其工作方式与上述第二种方法类似。

答案 1 :(得分:3)

您也可以使用Boost.Variant

答案 2 :(得分:2)

如果您想同时使用所有值,可以使用类似的内容......

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

答案 3 :(得分:2)

既然你是初学者,只需使用基本的东西:结构。

#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";
}

输出:

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

您可以看到输出直播on Ideone

答案 4 :(得分:0)

使用struct,class或std :: pair将不同类型分组为复合类型,然后使用适当的STL容器。

答案 5 :(得分:0)