【问题标题】:Vector of fixed array in c++98c++98中固定数组的向量
【发布时间】:2011-08-13 20:20:32
【问题描述】:

我需要在一个向量中存储不确定数量的三角形,因此,它会是这样的:

std::vector<Point[3]>

但这不是有效的 C++98。还有哪些不涉及三角形结构的解决方案?

谢谢

【问题讨论】:

  • 为什么不使用结构体?
  • 我会创建一个新类型的 Triangle 来保存 3 个点,并将其存储在向量中。
  • 检查你的编译器是否带有&lt;tr1/array&gt;...
  • 这是"Pushing a static array into a std::vector?" 的副本,是您自己提出的。很高兴看到我们的帮助对您有用,并且您从提出了这么多问题中学到了东西。

标签: c++ c++98


【解决方案1】:

试试boost::array&lt;Point, 3&gt;。那应该是必需品。

【讨论】:

  • @Ajay 我认为 boost 旨在符合 C++ 98
  • 是的,但是array 的实现 - 可能会起作用。但不确定编译器是否支持所有复杂的模板内容。
  • 我明白。但我不知道boost::array 何时出现在 Boost 库中。这意味着如果我获得最新的 Boost,它可能会或可能不会在所有编译器上编译。 Boost 库可能足够聪明,可以根据编译器版本启用/禁用功能 - 但哪个编译器?那会/可能会破坏便携性。
  • @Ajay:Boost 竭尽全力保持便携性,array 是一个微不足道的模板。
  • @Ajay: array 是一个非常非常简单的类模板。任何具有编译std::vector 所需资源的编译器都可以处理boost::arrayarray 根本不使用任何复杂的模板魔法。 Boost 确实有一些这样的,但你需要真正知道它在哪里。此外,Boost 有宏来告诉你你正在使用什么编译器,这样你就可以拥有为那个编译器编译的代码。此外,如果你运行的是 VC6,那么无论如何你都必须升级。
【解决方案2】:
  • 你可以定义一个struct
  • 你可以使用pair&lt;pair&lt;Point,Point&gt;,Point&gt;类型
  • 如果您可以使用最新的 C++,有很多选择,其中之一是使用 std::tuple。如果这种情况更多,您可以实现自己的 tuple 类,采用 3 种或更多类型。

【讨论】:

  • pair&lt;pair&lt;Point,Point&gt;,Point&gt; - 请,不,不,不!
  • 这取决于视角。我知道在这种情况下理解.first.second 的含义会很复杂。这就是为什么我建议tuple
  • 虽然我永远不会使用一对对点,而且我知道元组,并且制作了一个结构,但我会接受你的回答,因为你没有安全地玩它并直接去提升:)
猜你喜欢
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2021-06-19
相关资源
最近更新 更多