gpt4 book ai didi

c++ - 我应该使用 std::for_each 吗?

转载 作者:IT老高 更新时间:2023-10-28 14:01:09 25 4
gpt4 key购买 nike

我一直在尝试更多地了解我使用的语言(不同的风格、框架、模式等)。我注意到我从不使用 std::for_each所以我想也许我应该开始。在这种情况下,目标是扩展我的思维,而不是而不是在某些方面改进代码(可读性、表达性、紧凑性等)。

因此,考虑到这种情况,将 std::for_each 用于简单的任务是一个好主意,比如打印出一个 vector :

for_each(v.begin(), v.end(), [](int n) { cout << n << endl; }

([](int n) 是一个 lambda 函数)。而不是:

for(int i=0; i<v.size(); i++) { cout << v[i] << endl; }

我希望这个问题看起来不是毫无意义的。我想这几乎提出了一个更大的问题......中级程序员是否应该使用语言功能,即使他在 这次 并不真正需要,但只是为了让他能够更好地理解该功能实际上可能会从中受益匪浅的时间。虽然这个更大的问题可能已经被问过了(例如 here )。

最佳答案

使用 std::for_each 代替老式的 for 循环(甚至是新奇的 C++0x range-for loop):你可以看看语句的第一个单词,你就知道语句的作用了。

当您看到 for_each 时,您就知道 lambda 中的操作对范围内的每个元素只执行一次(假设没有抛出异常)。不可能在处理完每个元素之前尽早退出循环,也不可能跳过元素或多次评估一个元素的循环体。

使用 for 循环,您必须阅读整个循环体才能知道它的作用。它可能有 continuebreakreturn 语句来改变控制流。它可能有修改迭代器或索引变量的语句。如果不检查整个循环,就无法知道。

Herb Sutter 讨论了使用算法和 lambda 表达式的优势 in a recent presentation to the Northwest C++ Users Group .

请注意,如果您愿意,实际上可以在此处使用 std::copy 算法:

std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));

关于c++ - 我应该使用 std::for_each 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com