考虑以下代码片段:迭代第一个类型T1的容器,创建第二个类型T2的容器,应用转换函数T1-> T2,但仅针对验证谓词(T1-> bool)的T1元素。
(在下面的示例中为“是奇数”)。
std::vector<int> myIntVector;
myIntVector.push_back(10);
myIntVector.push_back(15);
myIntVector.push_back(30);
myIntVector.push_back(13);
std::vector<std::string> myStringVectorOfOdd;
std::for_each(myIntVector.begin(), myIntVector.end(),
[&myStringVectorOfOdd](int val)
{
if (val % 2 != 0)
myStringVectorOfOdd.push_back(std::to_string(val));
});
我不喜欢这段代码中lambda的捕获方式。有没有一种更优雅、更简洁的方法来结合std::copy_if和std::transform以达到相同的结果?
myStringVectorOfOdd = [str(x) for x in myIntVector) if x % 2 == 1]
,但也不算太糟糕。 - paxdiablo