この例を考えると:
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>>
?