【问题标题】:returning column from a std vector of fusion vectors, without copying从融合向量的标准向量返回列,不复制
【发布时间】:2012-02-17 23:01:41
【问题描述】:

我有一个由std::vector 表示的“表格”,其中每个元素都是boost::fusion::vector。我需要将此表的“列”的表示形式返回为std::vector,而不复制任何值。这样做的最佳方法是什么?我正在尝试构建 nviews 的std::vector,其中 n 是列号,但它似乎不起作用。我是在正确的轨道上还是有其他方法可以解决这个问题?

【问题讨论】:

  • 你可以使用C++11还是仅限于C++03?
  • 我想我都可以,但我想知道会有什么不同。

标签: c++ templates boost template-meta-programming boost-fusion


【解决方案1】:

根据docs hereboost::fusion::vectorat<N>(s) 方法返回对包含元素的引用。

此外,如果您使用 1.48 版的 boost 库,它们支持 C++11 的移动语义。这意味着您可以拥有一个函数,该函数针对特定列号(例如i)循环遍历表的大小,并填充一个列向量,即std::vector。然后,您只需返回此列向量,调用函数将获得 moved std::vector。任何时候都不会复制。

您可以在标准页面本身阅读更多关于move semantics here 的信息。也可以观看Bjarne Stroustrup explaining it in brief here的视频。跳到第 37 分钟,一直看到第 43 分钟。

【讨论】:

    猜你喜欢
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多