是否有任何C ++容器可以存储2种(或更多)类型的值,例如int和chars?我想做一个二十一点游戏。甲板必须包括整数和字符。我不想用数字来初始化它(所以不要说任何事情!)。我是非常初学程序员,所以不要太复杂。
答案 0 :(得分:5)
我假设您需要一个能够存储整数或字符的容器。
首先,查看Boost中的boost::any
数据类型,这可能有所帮助。然后,您可以创建boost::any
个实例的容器。
如果您不想使用boost
或似乎有点矫枉过正,请按以下方式使用union
:
typedef struct {
char type;
union {
char character;
int integer;
};
} my_struct;
然后,联合中的character
和integer
字段的内容占用相同的内存插槽。 (好吧,integer
使用更多的插槽,因为字符通常只有一个字节)。然后由您决定将结构的type
字段设置为'c'
,如果您存储一个字符,并设置为'i'
来存储整数,然后访问使用character
或integer
字段的结构内容取决于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)
您可以使用Boost Tuple对象。 更多信息:http://www.boost.org/doc/libs/1_46_1/libs/tuple/doc/tuple_users_guide.html#using_library