Есть ли разница в производительности/безопасных мудро проверяющие векторных элементов с использованиемПоиск станда :: вектор объектов класса атрибут класса (имя, например.)
- для цикла с итераторы
против .
- std: find_if (...)?
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;
}
}
против
2. станд: find_if
// 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_;
};
Ничего другого «безопасно». Для производительности вам придется ориентироваться. – StoryTeller
В конечном итоге 'std :: find_if' будет перебирать вектор, поэтому я не вижу разницы в производительности. – DimChtz
Там [* может * быть различий в производительности в любом случае.] (Http://stackoverflow.com/a/36988833/4892076). Любая такая разница достаточно мала, чтобы быть преждевременной оптимизацией, если вы на самом деле не определили цикл как тем не менее, и в этом случае вы захотите сделать профилирование самостоятельно. – jaggedSpire