【发布时间】:2019-05-10 13:05:24
【问题描述】:
我正在试用新的 range-v3 库(0.5.0,clang-7.1)
我正在遍历一个图表 (bfs)。图中的每个节点都包含一些向量数据(std::vector<double>)。在遍历图表时,我正在尝试创建一个concat_view(它是所有向量的串联)。
我正在尝试将此concat_view 存储为图形遍历类的成员变量。 (准确地说,来自 boost 图形库的default_bfs_visitor)。所以,预先,我不知道我会遇到多少向量。我正在做这样的事情。
struct bfs_visitor
{
private:
ranges::v3::any_view<double> mView;
public:
template<class Graph>
void finish_vertex (vertex_descriptor v, const Graph& g)
{
auto node = g[v];
std::vector<double>& data = dataForNode(node);
mView = ranges::v3::concat(mView, data);
}
};
访问完图表后,我会处理视图以提取所需信息。
由于mView 的类型随着每个concat 操作而变化,我无法在声明中明确指定mView 的类型。
This link 表示any_view 的性能受到影响。 any_view 是唯一的选择吗?
【问题讨论】:
-
你的链接失效了
-
你能在视图上制作 bfs_visitor 模板并让 finish_vertex 返回新的 bfs_visitor 作为 concat 的结果吗?
-
-
据我所知,没有一个视图可以使一系列范围变平。如果有,您只需累积您的
datas,然后变平。 -
view::join展平一系列范围。
标签: c++ boost-graph range-v3