foreach — C ++ Может кто-нибудь помочь мне объяснить код карты / for_each [РЕДАКТИРОВАТЬ]

[Спасибо за ответы, а также извините за то, что не совсем все понимаю, наверное, я пытаюсь бежать, но знаю, как ходить] Если бы кто-нибудь мог объяснить мне, что здесь происходит, я бы действительно оценил это!
(Просто изучаю C ++, и я не могу понять сам / Mr.Google)

string luck;
int choice;
std::map< int, std::string > cookies {
{ 1, "Tomorrow is a day" },
{ 2, "Tomorrow can be cool" },
{ 3, "Summer is coming" }
};
while( cookies.size() ) {
cout << "What cookie do you want? [";
for_each( cookies.begin(), cookies.end(), []( std::map< int, string >::value_type & v ) { cout << v.first << ','; } );
cout << ']';
cin >> choice;

map< int, string >::iterator iter( cookies.find( choice ) );
if( iter == cookies.end() )
cout << "Sorry, that cookie has been taken" << endl;
else {
cout << iter->second << endl;
cookies.erase( iter );
}

Если возможно, пожалуйста, попробуйте объяснить мне, как вы объясняете, как ходить к ребенку, я действительно знаю только основы из базовых.

Спасибо

0

Решение

#include <ctime> не требуется в коде, который вы опубликовали. Удаление этого не будет иметь никакого эффекта.

#include <algorithm> необходим для std::for_each,
std:: префикс не нужен, так как некоторые аргументы также находятся в std Пространство имен.

std::for_each это функция, которая вызывает функтор, заданный в качестве третьего аргумента для каждого элемента между заданными итераторами начала и конца.

[]( std::map< int, string >::value_type & v ) { cout << v.first << ','; } является лямбда-функцией, используемой в качестве вышеупомянутого функтора.

for_each Блок может быть проще для понимания написан как диапазон, основанный на цикле:

for(auto v: cookies)
{
cout << v.first << ',';
}
2

Другие решения

  1. #include <map> Вам нужно использовать стандартный STL контейнер контейнера подробнее Вот
  2. то же самое для заголовка <algorithm> это позволяет вам использовать алгоритм for_each больше информации Вот
  3. На самом деле я не знаю, для чего заголовок <ctime> нужно здесь, но вы можете прочитать об этом Вот
  4. fore_each

template <class InputIterator, class Function>
Function for_each (InputIterator first, InputIterator last, Function fn);

Применяет функцию fn к каждому из элементов в диапазоне [first, last).

А также больше информации, которую вы также можете найти в разных книгах

1

По вопросам рекламы [email protected]