C ++有人可以帮我解释一个map / for_each代码[编辑]

时间:2016-01-23 18:51:45

标签: c++ foreach map-function

[谢谢你的答案,也很抱歉没有真正了解所有人,我想我想尝试跑步却知道怎么走路] 如果有人能解释我在这里发生了什么,我真的会高兴它! (只是学习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 );
}

如果可能的话,请尝试向我解释,就像你要解释如何走路去看孩子一样,我真的只知道基本的基础知识。

谢谢

2 个答案:

答案 0 :(得分:2)

您发布的代码中不需要#include <ctime>。删除它将没有任何效果。

#include <algorithm>需要std::for_each。 不需要std::前缀,因为某些参数也在std命名空间中。

std::for_each是一个函数,它调用作为给定开始和结束迭代器之间每个元素的第三个参数给出的仿函数。

[]( std::map< int, string >::value_type & v ) { cout << v.first << ','; }是一个lambda函数,用作上面提到的函子。

for_each块可能更容易理解为基于循环的范围:

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

答案 1 :(得分:1)

  1. #include <map>您需要使用标准版的地图容器更多信息here
  2. 与标题<algorithm>相同,它允许您使用算法for_each more info here
  3. 目前我不知道此处需要哪个标题<ctime>,但您可以阅读here
  4. fore_each
  5.   

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

         

    将函数fn应用于[first,last]范围内的每个元素。

    还有更多信息,你也可以在不同的书中找到