c++ STL中 for_each 算法存在的意义是什么?

补充一下哈,求大神轻虐。2017-01-15 我问题描述里在for循环里用auto是为了和for_each里的begin与end相呼应,我知道有范围for循环这个概念,我也知道那个迭代器有个类型好复杂的,只是提问的时候想不起来了又懒得翻书就写了个auto。 我的提问点是for_each和普通for循环在写法结构相似——1都要写明循环起始终止条件,2循环体里的func单独抽出来定义和用lambda表达式写法也很相似,仅仅是少了一些变量类型的定义),那么单独开发…
关注者
121
被浏览
27514

24 个回答

同样是循环,同样的效果,但不同的写法抽象程度不同,语义不同。

你要的例子:

---

for (auto& e : employees) {
   sendAppleTo(e);
}

局长:小李啊,过年了,给我们每个员工发一箱苹果。

小李:好的。

---

std::for_each(std::begin(employees), std::end(employees),
              sendAppleTo);

局长:小李啊,过年了,给我们所有员工每人发一箱苹果。

小李:好的。(咦?这强烈的既视感……)

---

for (auto iter = std::begin(employees);
     iter != std::end(employees);
     ++iter)
{
    auto& e = *iter;
    sendAppleTo(e);
}

局长:小李啊,过年了,你帮我把我们公司员工按顺序叫来我办公室。

小李:好嘞!

……

员工甲:局长,您叫我?

局长:啊,小甲,发你一箱苹果。

员工甲:谢谢局长!

局长:小李,叫下一个进来。

……

员工乙:局长,您叫我?

局长:啊,小乙,发你一箱苹果。

员工乙:谢谢局长!

局长:小李,叫下一个进来。

……

小李:局长,没有下一个了,大家都已经都来过了。

局长:啊,好好好,收工,哈哈哈。

小李:局长啊,这种事情,以后您说给每个员工发箱苹果就好了,不用麻烦您老,我可以帮您办。

---

for (size_t i = 0; i < employees.size(); i++) {
    auto& e = employees[i];
    sendAppleTo(e);
}

局长:小李啊,过年了,我问你,我们公司现在一共多少员工?

小李:两千名员工。

局长:那你先把第一个员工叫来。

小李:啊,好的。

……

员工一号:局长,您叫我?

局长:啊,小一,发你一箱苹果。

员工一号:谢谢局长!

局长:小李,刚才那个是几号来着?

小李:一号。

局长:那好,你再帮我把二号叫来。

小李:啊,好的。

……

局长:小李,刚才那个是几号来着?

小李:两千号。

局长:那就是所有人都来过了是吧?

小李:是的……(MDZZ)

可以减小圈复杂度啊(手动微笑