C++ 如何为类方法提供STL容器以进行惰性计算?
我正在尝试实现一个并行的数据收集和随后的单任务数据处理。并行任务将数据收集到多个向量中,然后将收集到的容器传递到单个任务处理类中。一旦所有采集者完成数据采集,处理阶段将开始 然而,我对如何实现一个处理类成员来保存收集的数据感到困惑。我不能让它们引用向量,因为引用应该在处理对象初始化时初始化。我可能无法让它们指向向量,因为指针摆弄是不受欢迎的。我也不能让它们成为另一组向量,以避免赋值操作期间不必要的数据复制C++ 如何为类方法提供STL容器以进行惰性计算?,c++,vector,stl,C++,Vector,Stl,我正在尝试实现一个并行的数据收集和随后的单任务数据处理。并行任务将数据收集到多个向量中,然后将收集到的容器传递到单个任务处理类中。一旦所有采集者完成数据采集,处理阶段将开始 然而,我对如何实现一个处理类成员来保存收集的数据感到困惑。我不能让它们引用向量,因为引用应该在处理对象初始化时初始化。我可能无法让它们指向向量,因为指针摆弄是不受欢迎的。我也不能让它们成为另一组向量,以避免赋值操作期间不必要的数据复制 我应该如何设计处理类的内部结构以绕过这些限制?答案在您的问题中-“…将数据收集到多个向量中
我应该如何设计处理类的内部结构以绕过这些限制?答案在您的问题中-“…将数据收集到多个向量中,然后传递收集的容器…” 您可以创建内部数据结构
std::vector
,并使用内部向量传递外部数据:
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);
}
}
class-foo
{
公众:
void set_vector(std::vector&&vector)
{
标准::交换(内部向量,向量);
}
无效替代集向量(标准::向量和向量)
{
标准::交换(内部向量,向量);
}
私人:
std::向量内部向量;
};
无效使用_foo()
{
foo some_foo;
{
std::vector outside_vector;//用数据填充outside_vector
一些集合向量(std::move(outside_vector));
}
{
std::vector outside_vector;//用数据填充outside_vector
一些选择集向量(外部向量);
}
}
带有
alternative\u set\u vector
的版本运行良好,但对于调用代码来说,向量将“填充”一些“随机”并不明显调用后的值。< /P>在代码> STD中有Asgig操作员::SWIFT < /C> >和std::swap
,您是对的。然而,这将导致原始数据向量变为空,对吗?假设处理不会改变数据,是否有办法使数据保留在原始向量中,以便在另一个处理类中使用?您可以在将数据放在处理类中时从处理类中获取数据。但老实说,我不推荐这个。如果您确实拥有共享数据,为什么不使用共享的ptr呢?看起来你真的分享了这些数据!