2种容器
是否有任何 C++ 容器可以存储 2 种(或更多)类型的值,例如 int 和 char?我想做一个二十一点游戏。牌组必须由整数和字符组成。我不想只用数字来初始化它(所以不要对此说什么!)。我是一个非常的初学者程序员,所以不要让它太复杂。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
是否有任何 C++ 容器可以存储 2 种(或更多)类型的值,例如 int 和 char?我想做一个二十一点游戏。牌组必须由整数和字符组成。我不想只用数字来初始化它(所以不要对此说什么!)。我是一个非常的初学者程序员,所以不要让它太复杂。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
我假设您需要一个能够存储整数或字符的容器。
首先,看一下 boost::any 数据类型="nofollow">Boost,这可能会有所帮助。然后,您可以创建一个包含
boost::any
实例的容器。如果您不想使用
boost
或者它看起来有些过分,请使用union
如下:character
和的内容然后联合体中的>integer
字段占用相同的内存槽。 (嗯,整数使用更多的槽,因为字符通常只有一个字节)。然后,您可以将结构体的type
字段设置为,例如,'c'
(如果您存储字符),并设置为,例如,'i '
来存储整数,然后根据type
的值使用character
或integer
字段访问结构体的内容代码>.最后,还有 Qt 的 QVariant 数据类型,其工作原理与上述第二种方法类似。
I'm assuming that you need a container which is able to store either ints or chars.
First, take a look at the
boost::any
datatype in Boost, that might help. You can then create a container ofboost::any
instances.If you don't want to use
boost
or it seems overkill, use aunion
as follows:The contents of the
character
and theinteger
field in the union then occupy the same memory slots. (Well, theinteger
uses more slots since chars are usually only one byte). It is then up to you to set thetype
field of the struct to, say,'c'
if you store a character and to, say,'i'
to store an integer, and then access the contents of the struct using thecharacter
or theinteger
field depending on the value oftype
.Finally, there's also the QVariant datatype of Qt, which works similarly to the second approach described above.
您也可以使用 Boost.Variant
Also you can use Boost.Variant
由于您是初学者,因此只需使用基本的东西:结构。
输出:
您可以在 Ideone 上实时查看输出。
Since you're a beginner, just use the basic stuff: a struct.
Output:
You can see the output live on Ideone.
如果你想同时使用所有的值,你可以使用这样的东西......
If you want to use all of the values simultaneously, you can use something like this...
使用 struct、class 或 std::pair 将不同类型分组为复合类型,然后使用适当的 STL 容器。
Use a struct, class, or std::pair to group the different types into a composite type and then use the appropriate STL container.
您可以使用 Boost Tuple 对象。
更多信息:http://www.boost。 org/doc/libs/1_46_1/libs/tuple/doc/tuple_users_guide.html#using_library
You can use Boost Tuple objects.
More info : http://www.boost.org/doc/libs/1_46_1/libs/tuple/doc/tuple_users_guide.html#using_library