考慮這個例子:如何從源向量<>構建向量<>的搜索結果?
std::vector<Student> students;
//poplate students from a data source
std::vector<Student> searched(students.size());
auto s = std::copy_if(students.begin(), students.end(), searched.begin(),
[](const Student &stud) {
return stud.getFirstName().find("an") != std::string::npos;
});
searched.resize(std::distance(searched.begin(), s));
我有以下問題:
- 它是確定爲檢索到的矢量分配內存等於初始向量?可能有500 不小的對象,也許沒有滿足搜索條件?有沒有其他方法?
- 當複製到搜索到的向量時,它被稱爲複製賦值運算符,並且..顯然是複製。如果來自滿足搜索標準的那500個對象400呢? 是不是隻是內存浪費?
我是一個C++小白所以我可以說一些愚蠢的事。我不明白爲什麼要使用vector<T>
,其中T
是一個對象。我總是會用vector<shared_ptr<T>>
。如果T
是一個像int這樣的基本類型,我猜它有點直接使用vector<T>
。
我認爲這個例子,因爲我認爲這是很一般的,你總要拉一些數據從數據庫或XML文件或任何其他來源。你會在你的數據訪問層有vector<T>
還是vector<shared_ptr<T>>
?
老實說,我會用'的std :: back_inserter(搜查)'的'copy_if'的輸出迭代器,並完全放棄初始大小。 – WhozCraig 2013-03-08 21:18:54
對於大多數情況(特別是#2)而言,一個好的迴應歸結於您爲什麼要首先製作副本的問題。如果可能,儘量避免進行復制,並使用類似'transform_if'的東西來過濾*和處理子集,而不是僅創建和存儲子集。 – 2013-03-08 21:32:59