【发布时间】:2018-09-19 07:47:45
【问题描述】:
考虑这段代码 sn-p :迭代第一种类型 T1 的一个容器,以创建第二种类型 T2 的第二个容器,应用转换函数 T1->T2 但仅用于验证谓词的 T1 元素 (T1 -> bool )
(在以下示例中为奇数)。
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 以更优雅和简洁的方式实现相同的结果?
【问题讨论】:
-
你为什么不喜欢捕获?您将其捕获为参考并将您的元素推到它上面。我不确定这有什么不足。诚然,这不是 Python 的漂亮
myStringVectorOfOdd = [str(x) for x in myIntVector) if x % 2 == 1],但也不是太糟糕。