- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我看来,std::copy_if
对于过滤容器非常有用:
std::vector<int> vec { 1, 2, 3, 4 };
auto itEnd = std::copy_if(vec.begin(), vec.end(), vec.begin(),
[](int i) { return i > 2; });
vec.resize(itEnd - vec.begin());
但是,std::copy_if
指定输入和输出范围不能重叠。
还有其他选择吗?
最佳答案
copy_if
主要用于将范围复制到另一个范围/容器,即按照设计,该算法的本质是将满足某些条件的元素复制到另一个(非重叠)范围或新容器。
remove_if
更适合您的需求;它正是用于过滤掉你所期望的。但是,它只是通过覆盖来删除元素;新旧端之间的残余在函数完成后将是未指定的元素,需要使用 erase
手动删除,如下所示:
std::vector<int> vec { 1, 2, 3, 4 };
vec.erase(std::remove_if(std::begin(vec),
std::end(vec),
[](int i) { return i <= 2; }),
std::end(vec));
这是一个名为 erase-remove 的 C++ 习语。 .
如果 copy
是您想要的,而不是 copy_if
,那么您有一个重叠范围的替代方案,即 copy_backward
;来自 the documentation
If d_first is within [first, last), std::copy_backward must be used instead of std::copy.
关于c++ - 就地 std::copy_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22631147/
copy_if() 算法可以从源序列复制使谓词返回 true 的元素,所以可以把它看作一个过滤器。前两个参数定义源序列的输入迭代器,第三个参数是指向目的序列的第一个位置的输出迭代器,第 4 个参数是一
为什么 copy_if 比 copy 慢 我目前正在研究我的 OpenGL 图形引擎。我试图找出将大量对象传递给 GPU 以进行实例化绘制的最佳方法。对我来说最大的问题是有些对象可能会死,所以我创建了
我是 C++ 新手,正在尝试使用 copy_if 函数: set people; // contains people objects set copyedPeople; string name =
如果我知道如何提取匹配类型,是否有一种现代方式来表达有条件地从不同类型的源容器复制到目标容器的意图? 将问题作为代码示例提出更容易: #include #include struct Foo {}
我有一些类的以下方法,它还定义了 isAllowed 方法: auto filter(const auto& in) { auto ret = decltype(in) {}; for
此代码尝试在多态指针 vector 上使用 copy_if(): #include #include #include using namespace std; class AbstractBa
尝试执行以下操作时,我在 thrust 模板的实例化中收到编译时错误: thrust::copy_if(deviceEntries.begin(), deviceEntries.end(), host
我想检查 std::copy_if 的返回值是否有效。像这样 auto it=std::copy_if(s.begin(),s.end(),d.begin(),[&](...){...}); if([
我有一个 string 数组,我想将其复制到 string 的 vector only if 一个特定的 string 的长度等于一个已知值。 function(int len){ string li
在我看来,std::copy_if 对于过滤容器非常有用: std::vector vec { 1, 2, 3, 4 }; auto itEnd = std::copy_if(vec.begin(),
我正在使用 Visual Studio 2010,我正在尝试使用 std::copy_if,我想复制所有满足谓词的值。例如: struct comp { bool operator()(con
这是代码的一部分,我遇到了麻烦 #include #include #include #include #include #include #include #include #include #in
我正在尝试在我的程序中使用 copy_if。我想将一个数组的值每 3 个元素复制到另一个数组中。 基本上,我写了这样一个程序: #include #include #include usin
澄清一下,这就是收集位的意思:(在这个问题的上下文中) size_t gather_bits(size_t source, size_t mask) { size_t result = 0,
我正在尝试使用 copy_if 复制 map (我想将 _citymap 复制到 _the_cities)。这是我的代码: std::map > _citymap; copy_if(_citymap.
完全公开,这可能是一个锤子和钉子的情况,在不需要的时候尝试使用 STL 算法。我在我正在使用的一些 C++14 代码中看到了一个重新出现的模式。我们有一个迭代的容器,如果当前元素符合某些条件,那么我们
假设我们有以下情况: struct A { int i; }; struct B { A a; int other_things; }; bool predicate( con
例如的非迭代器版本all_of 可以写成: template bool all_of(Container s, UnaryPredicate f) { return all_of(s.begin
出现以下错误: RuntimeError: copy_if failed to synchronize: device-side assert triggered 尝试执行时: 如果 torch.no
在 C++ 中没有 std::copy_if 算法有什么具体原因吗?我知道我可以使用 std::remove_copy_if 来实现所需的行为。我认为它是在 C++0x 中出现的,但是一个简单的 co
我是一名优秀的程序员,十分优秀!