gpt4 book ai didi

c++ - 不同类型的 copy_if

转载 作者:可可西里 更新时间:2023-11-01 15:46:14 24 4
gpt4 key购买 nike

如果我知道如何提取匹配类型,是否有一种现代方式来表达有条件地从不同类型的源容器复制到目标容器的意图?

将问题作为代码示例提出更容易:

#include <algorithm>
#include <vector>

struct Foo {};
struct FooBar{
bool is_valid;
Foo foo;
};

std::vector<Foo> get_valid_foos(const std::vector<FooBar>& foobars){
std::vector<Foo> valid_foos;
for(const auto& fbar : foobars){
if(fbar.is_valid)
valid_foos.push_back(fbar.foo);
}
return valid_foos;
}

std::vector<Foo> get_valid_foos_modern(const std::vector<FooBar>& foobars){
std::vector<Foo> valid_foos;
std::copy_if(foobars.begin(), foobars.end(), std::back_inserter(valid_foos),
[](const auto& foobar){
return foobar.is_valid;
});
//?? std::copy requires input and output types to match
return valid_foos;
}

https://godbolt.org/g/miPbfW

最佳答案

使用 range-v3 :

std::vector<Foo> get_valid_foos(const std::vector<FooBar>& foobars) {
return foobars
| view::filter(&FooBar::is_valid)
| view::transform(&FooBar::foo);
}

这很富有表现力。

关于c++ - 不同类型的 copy_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50914615/

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