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 );
}
Если возможно, пожалуйста, попробуйте объяснить мне, как вы объясняете, как ходить к ребенку, я действительно знаю только основы из базовых.
Спасибо
#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 << ',';
}
#include <map>
Вам нужно использовать стандартный STL контейнер контейнера подробнее Вот<algorithm>
это позволяет вам использовать алгоритм for_each больше информации Вот<ctime>
нужно здесь, но вы можете прочитать об этом Вот
template <class InputIterator, class Function>
Function for_each (InputIterator first, InputIterator last, Function fn);Применяет функцию fn к каждому из элементов в диапазоне [first, last).
А также больше информации, которую вы также можете найти в разных книгах