我试图通过随后的单任务数据处理来实现并行数据收集。并行任务将数据收集到多个向量中,然后将收集的容器传递到单任务处理类中。一旦所有采集者完成数据收集,处理阶段就会开始。
但是,我对如何实现保存收集数据的处理类成员感到困惑。我不能让它们引用向量,因为引用应该在处理对象初始化时初始化。我可能无法使它们成为向量的指针,因为指针摆弄是不准确的。我也无法使它们成为另一组向量,以避免在赋值操作期间进行不必要的数据复制。
我应该如何设计处理类的内部以绕过这些限制?
答案 0 :(得分:0)
答案在你的问题中 - " ...将数据收集到多个载体中然后传递收集的容器......"
您可以制作内部数据结构std::vector
并使用内部向量使用move和swap传递外部数据:
class foo
{
public:
void set_vector(std::vector<int>&& vector)
{
std::swap(internal_vector, vector);
}
void alternative_set_vector(std::vector<int>& vector)
{
std::swap(internal_vector, vector);
}
private:
std::vector<int> internal_vector;
};
void use_foo()
{
foo some_foo;
{
std::vector<int> outside_vector;//fill outside_vector with your data
some_foo.set_vector(std::move(outside_vector));
}
{
std::vector<int> outside_vector;//fill outside_vector with your data
some_foo.alternative_set_vector(outside_vector);
}
}
使用alternative_set_vector
的版本可以正常工作,但对于调用代码来说,向量将被填充并且#34;与一些&#34;随机&#34;通话后的价值观。