2015-11-17 91 views
1

我试图将字符串中的每个字符都转换为小写。而且这两个变换和foreach可以做到这一点:C++ 11 lambda:transform和for_each之间的区别

// use transform 
std::transform(str.begin(), str.end(), str.begin(), ::tolower); 
// use for_each 
for_each(str.begin(), str.end(), [](char &c){c = std::tolower(c);}); 

那么,有什么区别?哪一个在时间和空间效率上更好?

+0

std :: transform没有做for_each所做的事情,“transofrm”和“lambda”也是不相关的东西,就像是问一个指针和一个参数有什么区别.. –

+0

我怀疑'for_each(str .begin(),str.end(),[](char&c){std :: tolower(c);});'真的有用。应该可能是'for_each(str.begin(),str.end(),[](char&c){c = std :: tolower(c);});'。 – cpplearner

+0

@cpplearner是的,你是对的。我误写了这一个。谢谢! –

回答

1

您的意思是,transform vs for_each?因为你也可以使用lambdas作为transform的功能。

在这种情况下,transformfor_each之间没有真正的区别。 for_each是更通用的算法,我会在这种情况下使用变换,否则你只是重新实现使用for_each,这是不太清晰恕我直言,虽然清晰度有些主观,所以你的里程可能会有所不同。

就效率而言,在这种情况下不会有任何区别。在未来,如果你对这种事感兴趣,那么测量它可能会更容易。

+0

是的,但我不确定这种情况如何相关 – Cubic