1. Что лучше использовать?
Вообще не понимаю зачем нужны алгоритмы вроде for_each/generate/fill, они ведь в некоторых случаях только усложняют написание программы. Однако автор книги "Эффективное использование STL" уверяет в обратном, т.е. что это намного упрощает понимание и чтение программы и алгоритмы нужно использовать всегда где это возможно. Но он прав далеко не во всех случаях... К примеру такая простенькая задачка:
Есть C-массив целых чисел, каждая пара представляет собой координаты точки, нужно из этого массива сделать vector<POINT>. Без использования алгоритма STL реализация выглядит довольно просто и понятно:
int *pIntVec = pPoints;
vector<POINT> ptvec(point_count);
for(vector<POINT>::iterator iter=ptvec.begin();iter!=ptvec.end();iter++) {
iter->x = *pIntVec++; iter->y = *pIntVec++;
}
С использованием же алгоритма STL for_each или generate приходится писать собственный объект функции, зачем нужны такие расходы во времени написания когда есть вариант который и так понятен и прост в реализации?
2. Что эффективнее использовать?
Действительно ли алгоритмы перебора работают быстрее обычных циклов когда эти самые алгоритмы содержат эти же самые циклы?