如何为类方法提供STL容器进行延迟评估?

时间:2014-09-23 11:11:26

标签: c++ vector stl

我试图通过随后的单任务数据处理来实现并行数据收集。并行任务将数据收集到多个向量中,然后将收集的容器传递到单任务处理类中。一旦所有采集者完成数据收集,处理阶段就会开始。

但是,我对如何实现保存收集数据的处理类成员感到困惑。我不能让它们引用向量,因为引用应该在处理对象初始化时初始化。我可能无法使它们成为向量的指针,因为指针摆弄是不准确的。我也无法使它们成为另一组向量,以避免在赋值操作期间进行不必要的数据复制。

我应该如何设计处理类的内部以绕过这些限制?

1 个答案:

答案 0 :(得分:0)

答案在你的问题中 - " ...将数据收集到多个载体中然后传递收集的容器......"

您可以制作内部数据结构std::vector并使用内部向量使用moveswap传递外部数据:

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;通话后的价值观。