簡體   English   中英

如何為類方法提供STL容器以進行延遲評估?

[英]How to provide an STL container to a class method for lazy evaluation?

我正在嘗試通過隨后的單任務數據處理實現並行數據收集。 並行任務會將數據收集到多個向量中,然后將收集的容器傳遞到單任務處理類中。 所有收集者完成數據收集后,處理階段將開始。

但是,我對如何實現將保存收集到的數據的處理類成員感到困惑。 我不能使它們引用向量,因為引用應在處理對象初始化時初始化。 我可能無法使它們指向矢量的指針,因為不鼓勵使用指針擺弄。 我也不能使它們成為另一堆向量,以避免在分配操作期間不必要的數據復制。

我應該如何設計處理類的內部結構以繞過這些限制?

答案就在您的問題中-“ ...將數據收集到多個向量中,然后傳遞收集的容器...”

您可以創建內部數據結構std::vector並使用move傳遞外部數據,並將其與內部向量交換

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的版本alternative_set_vector正常工作,但是對於調用代碼而言,在調用之后將向量“填充”一些“隨機”值並不明顯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM