答案就在你的問題 - 「......收集數據到許多載體,然後通過收集容器......」
你可以讓你的內部數據結構std::vector
並通過使用move外部數據和swap他們與內部載體:
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
版本工作正常,但它不是爲載體將被「裝」與呼叫後,一些「隨機」值調用代碼明顯。
'std :: swap'中有assigment操作符,'std :: move'在C++中11 – mbaitoff 2014-09-23 11:26:13
@mbaitoff std :: swap對於向量具有恆定的時間複雜度 - std :: move不行任何任務 - 這只是一個演員。請檢查答案 – Felics 2014-09-23 11:28:15
中的鏈接是的,你對'std :: swap'說得對。但是,這會導致數據的原始矢量變空,對嗎?假設處理不改變數據,是否有辦法讓數據保留在原始向量中,以便在另一個處理類中使用? – mbaitoff 2014-09-23 12:22:27