【发布时间】:2019-06-16 03:05:58
【问题描述】:
完全公开,这可能是一个锤子和钉子的情况,在不需要时尝试使用 STL 算法。我在我正在使用的一些 C++14 代码中看到了一种重新出现的模式。我们有一个迭代的容器,如果当前元素匹配某个条件,那么我们将其中一个元素字段复制到另一个容器。
模式类似于:
for (auto it = std::begin(foo); it!=std::end(foo); ++it){
auto x = it->Some_member;
// Note, the check usually uses the field would add to the new container.
if(f(x) && g(x)){
bar.emplace_back(x);
}
}
这个想法几乎是一个累加,所应用的函数并不总是返回一个值。我只能想到一个解决方案,要么
- 需要一个函数来访问您想要累积的成员,以及另一个函数来检查条件。即How to combine std::copy_if and std::transform?
- 比我想更换的东西更糟糕。
这是个好主意吗?
【问题讨论】:
-
您对要存储的容器元素做了什么?你真的需要它们还是只是保存它们以获得它们的总和?
-
通常我们会保存一个 ID 以备后用。
-
好的。那么你链接到的
transform_if可能就是你想要的。 -
当 stl 算法是你的锤子,那么几乎每个问题实际上都是钉子;)