是否可以将std :: vector元素的本地内存传递给函数?

时间:2017-03-05 16:49:18

标签: c++ vector memory-management

我的代码可以在Coliru找到。重要的片段如下:

int main(){
    //create some random data
    std::vector<data_type> data(10000);
    std::generate(data.begin(), data.end(), data_filler<data_type>());

    std::vector< DataBucket<data_type> > data_buckets(19);
    // distribute the data into DataBuckets
    for(auto& data_point : data){
    // non-sense condition to sort data into buckets for this 
    // example to show the bucket a data point falls into isn't known a priori
        data_buckets[rand()%data_buckets.size()].AddData(data_point);
    }
}

我的模板类DataBucket是:

template<typename T = float>
class DataBucket {
public:
    DataBucket() {};
    ~DataBucket(){};
    inline void AddData(const T& data){
        this->data.emplace_back(data);
    };
    inline const std::vector<T>& Data() const {
        return this->data;
    }
private:
    std::vector<T> data;
};

代码非常简单,基本上只有少数数据点std::vector<data_type> data(100)被分配到DataBucket,其中包含一个私有std::vector<T> data来存储数据。

我想知道main中变量data的本地内存是否可以直接分配给std::vector<T> data而无需再次复制。因为在将数据分配给存储桶之后,我不再使用data向量而不是主进程。由于数据已经分配,​​因此不再分配整个数据是有意义的,而只是将if转移给另一个所有者。 DataBucket对象应该是已分配数据的唯一所有者。

我对c ++很陌生,所以我可能已经监督了一些功能,但是现在无法找到比上面给出的示例代码更好的方法。

0 个答案:

没有答案