从融合向量的标准向量返回列,而不复制
我有一个由 std::vector
表示的“表”,其中每个元素都是 boost::fusion::vector
。我需要将此表的“列”表示形式返回为 std::vector ,而不复制任何值。这样做的最佳方法是什么?我正在尝试构建 nviews 的 std::vector ,其中 n 是列号,但它似乎不起作用。我走在正确的道路上还是还有其他方法可以解决这个问题?
I have a "table" represented by a std::vector
where every element is a boost::fusion::vector
. I need to return a representation of a "column" of this table as a std::vector
, without copying any values over. What is the best way of doing this? I am trying to construct a std::vector
of nviews where n is the column number, but it does not seem to be working. Am I on the right track or are there other ways of going about this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据此处的 文档,
boost::fusion::vector
的at(s)
方法返回对所包含元素的引用。此外,如果您使用 boost 库版本 1.48,它们支持 C++11 的移动语义。这意味着您可以拥有一个函数,该函数可以循环遍历特定列的表大小,例如
i
,并填充一个列向量,该列向量是std::vector.然后,您只需返回该列向量,调用函数就会获得
move
dstd::vector
。任何时候都不会制作任何副本。您可以在此处阅读有关移动语义的更多信息 在标准页面本身。您还可以观看 Bjarne Stroustrup 解释的视频简而言之。跳到第 37 分钟并观看到第 43 分钟。
As per the docs here, the
at<N>(s)
method of theboost::fusion::vector
's return a reference to the contained element.Also if you are using boost library version 1.48, they support the move semantics of C++11. What this means is you can have a function which loops over the size of your table for a particular column no, say
i
, and populates a column vector which is anstd::vector
. You then just return this column vector and the calling function would get themove
dstd::vector
. No copies are made at any point.You can read more about the move semantics here at the standards page itself. You can also watch the video of Bjarne Stroustrup explaining it in brief here. Jump to minute 37 and watch till minute 43.