【问题标题】:Multiple Data Types with Vectors of Vectors具有向量向量的多种数据类型
【发布时间】:2012-08-17 08:00:25
【问题描述】:

我正在尝试找到一种方法来创建具有三种不同类型的 3 维向量,其结构如下:

Vector[long][int][double];

我发现了很多示例,展示了如何创建具有单一数据类型的 3d 矢量,例如:

std::vector<vector<vector<int> > >;

但我现在可以找到或弄清楚如何将多种数据类型分配给向量。

【问题讨论】:

  • 你不能那样做。您的第二个声明模仿了一个 3D 数组,没错,但向量没有维度。它们在单个内存块中保存一种类型的元素。无论如何,vec[3.14] 是什么意思?
  • 你能进一步描述你想要的结构吗?您提供的内容没有意义。

标签: c++ arrays vector types


【解决方案1】:

从概念上讲,Vector[long][int][double] 没有任何意义。您可以拥有 something 的向量的向量。到头来只有一种something

走出维度。如果您只是想在向量中的每个元素包含 3 个值,您可以通过多种方式做到这一点。制作一个包含您的 3 个值的类型的向量:可能是您自己的结构。

【讨论】:

  • 感谢您为我指明正确的方向;我将开始制作自己的结构。
【解决方案2】:

如果你想同时使用所有三种类型,你应该使用结构体。

struct Vector3d{
  long x;
  int y;
  double z;
};
//... or a union, if each entry only contains one type.
union NumberContainer
{
  long x;
  int y;
  double z;
};
std::vector<Vector3d> vector1;//Vector of three types
std::vector<NumberContainer> vector2;//Vector that can contain one of three types per entry
vector1[0].x=1;
vector1[0].y=2;
vector1[0].z=3;
//vector1 contains... x=1, y=2,z= 3
vector2[0].x=1;
vector2[0].y=2;
vector2[0].z=3;
//vector2 contains x=undefined, y=undefined, z=3

【讨论】:

  • @DeadMG 你的理由是什么?因为 boost:variant 是一个糟糕的选择有很多原因。
  • +1 来抵消 DeadMG 的 -1... 很高兴提及 boost::variant,但提及工会仍然完全合理。另外,这样一个奇怪的问题......也许真正需要vector&lt;vector&lt;vector&lt;NumberContainer&gt; &gt; &gt;,但我不能通过阅读Q来确定。
  • 联合是不安全的。这就是为什么boost::variant 应该始终是默认值,而不是联合。
  • @DeadMG 如果您只是采取一点预防措施,联合并不比其他 C++ 更不安全。另一方面,boost::variant 为一些非常基本的功能增加了大量的运行时和编译时间开销。更不用说额外的依赖了。是的,它有它的用途。但这不是其中之一。
  • @R. M. 我知道。它也不包含主要功能或包含......这是一个删节的例子。
【解决方案3】:

归根结底,您的数据结构必须包含 一些东西 ,而这些东西只能是一种类型。现在,如果您想在向量的每个位置存储多种数据类型,您的“某物”本身可以是多种不同类型的结构。

如果您提供更多上下文会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2016-02-01
    • 2016-09-19
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多