всякие контейнерные фор-ичи

May 09, 2011 23:27

пусть будет здесь тоже
std::for_each + lambda

// C++0x only.
std::for_each(theContainer.begin(), theContainer.end(), [](someType x) {
// do stuff with x.
});

range-based for loop

// C++0x only
for (auto x : theContainer) {
// do stuff with x.
}

MS-specific "for each"

// MSVC only
for each (auto x in theContainer) {
// do stuff with x.
}
Read more... )

cpp

Leave a comment

Comments 6

ens_a_se May 10 2011, 06:24:02 UTC
Самое ужасное что большая часть с++ сообщества смотрит на лямбды как на что-то фриковое. Между тем лямбды избавляют нас от магии вокруг bind, функторов и части алгоритмов, специальных итераторов stl и тп и тд. тем не менее все это упорно продолжает использоваться, спрашиваться на собеседованиях. чертова инертность индустрии.

Reply

h_323 May 10 2011, 14:10:20 UTC
C++0x не шибко ушел в народ. У нас, насколько я понимаю, не так много народу на 10й студии сидит. А бинды с функторами (особенно predefined) и все эти mem_fun_ref должны умереть. Так славно, что больше не придется этого писать, а тем более, читать. Про итераторы и алгоритмы не очень понимаю о чем идет речь. Я люблю и то, и другое. И либа Boost.Iterator тоже очень прекрасна

Reply

ens_a_se May 10 2011, 14:14:45 UTC
там есть back_insert'ы всякие. можно же просто написать for_each(itb, ite, [&](value) { anotherContainer.push_back(value); } ) вместо copy(itb, ite, back_inserter(anotherContainer))

таким образом некоторые итераторы отомрут и некоторые алгоритмы будут менее востребованы.

Reply

h_323 May 10 2011, 14:39:12 UTC
Понятно. Но мне 2й вариант нравится больше. Может со мной что-то не так. В принципе, если anotherContainer пустой, то тогда бы препочел что-нибудь вроде anotherContainer.assign(itb, ite)
И кстати, std::for_each мне в смысле C++0x не очень нравится. Больше нравится ranged for-loop. Причем настолько нравится, что от безысходности леплю микрософтовский, пока они свою таинственную VC11 строят.

Reply


Leave a comment

Up