【问题标题】:std::vector mixed data types [duplicate]std::vector 混合数据类型
【发布时间】:2013-10-11 21:58:13
【问题描述】:

我试图将数字和字母列表读入std::vector<char>。由于它产生错误,我只尝试读取数字:

#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
    vector<char> zahlen;
    for (int i = 0; i < 10; ++i)
    {
        zahlen.push_back(i);
    }
    for (int i = 0; i < zahlen.size(); ++i)
    {
        cout<<zahlen[i];
    }
    cout<<endl;
    return 0;
}

这会产生一些奇怪的输出。我究竟做错了什么?如何在向量或其他容器中存储多种类型的数据?

编辑:

cout<<(int)zahlen[i];

这完成了显示内容的工作,但我如何识别不同类型的数据?

【问题讨论】:

  • "如何在向量或其他容器中存储多种类型的数据?"您不能直接(在std::vector 中)。你想达到什么目的(为什么要将数字字母存储在同一个vector中)?
  • "这会产生一些奇怪的输出。"由于vector 的元素属于char 类型,因此使用cout &lt;&lt; zahlen[i] 会输出解释为字符的数字。
  • 你想做的是cout &lt;&lt; (int)zahlen[i];。 (或者cout &lt;&lt; static_cast&lt;int&gt;(zahlen[i]);,不管你的船是什么)。更好的是,使用std::vector&lt;int&gt; 应该可以解决问题。 :V
  • 所以 (int)zahlen[i] 做得很好,但是如何识别输入的类型呢?
  • 什么是“奇怪的输出”?

标签: c++ c++11 vector


【解决方案1】:

根据您的 for 循环,我假设您说“数字”时,实际上是指“十进制数字”。

您可以使用std::vector&lt;char&gt; 来存储十进制数字和字母,但它们都将表示为char。您可以通过使用系统的字符编码来存储十进制数字来解决这个问题。一种简单的方法:

    vector<char> zahlen;
    for (int i = 0; i < 10; ++i)
    {
        zahlen.push_back('0' + i);
    }

如果您真正的意思不是“十进制数字”,而是任意数字,那么您的vector 需要比char 更复杂的东西。正如 cmets 中所建议的,Boost.Any 是一种可能性。

【讨论】:

  • Boost.Any 很全面,但你自己把一些更简单的东西放在一起并不难。有关示例,请参见 this demo
  • 或者只使用一个元组...
  • @JimR:虽然tuple&lt;&gt; 可以保存异构数据,但它是一种静态类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2016-03-14
  • 2017-04-10
  • 2019-10-12
  • 2019-11-12
  • 1970-01-01
  • 2014-07-21
相关资源
最近更新 更多