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