Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为类方法提供STL容器以进行惰性计算?_C++_Vector_Stl - Fatal编程技术网

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> >和是C++语言11@mbaitoffstd::swap for vectors具有恒定的时间复杂度-std::move不执行任何赋值-它只是一个强制转换。请检查答案中的链接是的,关于
std::swap
,您是对的。然而,这将导致原始数据向量变为空,对吗?假设处理不会改变数据,是否有办法使数据保留在原始向量中,以便在另一个处理类中使用?您可以在将数据放在处理类中时从处理类中获取数据。但老实说,我不推荐这个。如果您确实拥有共享数据,为什么不使用共享的ptr呢?看起来你真的分享了这些数据!