gpt4 book ai didi

c++ - std::transform 和 std::for_each 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 13:58:15 37 4
gpt4 key购买 nike

两者都可用于将函数应用于一系列元素。

在高层次上:

  • std::for_each 忽略函数的返回值,并且保证执行顺序。
  • std::transform 将返回值分配给迭代器,并执行不保证执行顺序。

您更喜欢在什么时候使用其中一个而不是另一个?有什么微妙的警告吗?

最佳答案

std::transformmap 相同。这个想法是对两个迭代器之间的每个元素应用一个函数,并获得一个由应用这种函数产生的元素组成的不同容器。您可能希望将其用于例如将对象的数据成员投影到新容器中。在下面,std::transform 用于在 std::size_ts 的容器中转换 std::strings 的容器.

std::vector<std::string> names = {"hi", "test", "foo"};
std::vector<std::size_t> name_sizes;

std::transform(names.begin(), names.end(), std::back_inserter(name_sizes), [](const std::string& name) { return name.size();});

另一方面,您执行 std::for_each 只是为了产生副作用。换句话说,std::for_each 非常类似于普通的基于范围的 for 循环。

回到字符串示例:

std::for_each(name_sizes.begin(), name_sizes.end(), [](std::size_t name_size) {
std::cout << name_size << std::endl;
});

确实,从 C++11 开始,同样可以使用基于范围的 for 循环使用更简洁的符号来实现:

for (std::size_t name_size: name_sizes) {
std::cout << name_size << std::endl;
}

关于c++ - std::transform 和 std::for_each 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31064749/

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