tekrarlayıcılara arama Std :: class özelliği sınıf nesneleri vektör (örneğin. Ad)
vs ile döngüsü
- kullanarak herhangi bir fark performans/kasa-bazlı kontrol vektör elemanları var
- std: find_if (...)? döngü
1.
// 1. for loop for (llvm::SmallVectorImpl<myClass>::const_iterator it = v.begin(); it != v.end(); ++it) { if (it->getName() == Name) { // found element // do smth... break; } }
vs
2. std:
// 2. find if llvm::SmallVectorImpl<myClass>::const_iterator it = std::find_if(v.begin(), v.end(), StringCheck<llvm::StringRef>(Name)); if (it != v.end()) { // found element // do smth... } // StringCheck defined in header... template <class T> struct StringCheck{ StringCheck(const T &s) : s_(s) {} bool operator()(const myClass &obj) const { return obj.getName() == s_; } private: const T &s_; };
- std: find_if (...)? döngü
Farklı bir şey "güvenli" değil. Performans için kıyaslama yapmalısınız. – StoryTeller
Nihayetinde, 'std :: find_if' vektörü yineleyecek, bu yüzden performans farkı yok. – DimChtz
Orada [* her iki şekilde de bir performans farkı olabilir.] (Http://stackoverflow.com/a/36988833/4892076) Bu tür bir fark, döngüyü gerçekten bir öznitelik olarak tanımlayamadığınız sürece, zamanından önce bir optimizasyon olacak kadar küçüktür. darboğaz olsa da, bu durumda profilleme kendiniz yapmak isteyeceksiniz. – jaggedSpire