- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 Visual Studio 2010,我正在尝试使用 std::copy_if,我想复制所有满足谓词的值。例如:
struct comp
{
bool operator()(const int i) { return i == 5 || i == 7; }
};
int main()
{
array<int, 10> arr = { 3, 2, 5, 7, 3, 5, 6, 7 };
vector<int> res;
copy_if(arr.begin(), arr.end(), res.begin(), comp());
for(int i = 0; i < res.size(); i++)
{
cout << res[i] << endl;
}
return 0;
}
但是当我运行这段代码时,我得到:vector iterator not incrementable。
最佳答案
copy_if 算法看起来像这样(取自 MSVC2010):
template<class InIt, class OutIt, class Pr> inline
OutIt copy_if(InIt First, InIt Last, OutIt Dest, Pr Pred)
{
for (; First != _Last; ++First)
if (Pred(*_First))
*Dest++ = *First;
return (Dest);
}
正如你所见,copy_if 并没有执行 push_back,它只是将值复制到迭代器所在的位置,然后递增迭代器。你想要使用的是 std::back_inserter,它将元素推回你的 vector 。如果您使用的是 MSVC2010,您可以使用 Lambda 而不是 Microsoft 作为扩展提供的函数对象(C++0x)
int main()
{
array<int, 10> arr = { 3, 2, 5, 7, 3, 5, 6, 7 };
vector<int> res;
copy_if(arr.begin(), arr.end(), back_inserter(res),[](const int i) { return i == 5 || i == 7; });
for(unsigned i = 0; i < res.size(); i++)
cout << res[i] << endl;
return 0;
}
关于c++ - 我是否使用了 copy_if 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432739/
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
我是一名优秀的程序员,十分优秀!