gpt4 book ai didi

c++ - 为什么 remove_copy_if 返回一个空 vector ?

转载 作者:太空狗 更新时间:2023-10-29 19:53:38 25 4
gpt4 key购买 nike

能否请您向我解释一下我在以下代码中做错了什么?我希望第二个 vector 中的值 >= 80 但它是空的。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Tester
{
public:
int value;
Tester(int foo)
{
value = foo;
}
};

bool compare(Tester temp)
{
if (temp.value < 80)
return true;
else
return false;
}

int main()
{
vector<Tester> vec1;
vector<Tester> vec2;
vec1.reserve(100);
vec2.reserve(100);

for(int foo=0; foo<100; ++foo)
vec1.push_back(Tester(foo));

remove_copy_if(vec1.begin(), vec1.end(), vec2.begin(), compare);

cout<< "Size: " << vec2.size() << endl;

cout<< "Elements"<<endl;
for(int foo=0; foo < vec2.size(); ++foo)
cout << vec2.at(foo).value << " ";
cout<<endl;

return 0;
}

最佳答案

函数 std::remove_copy_if() 将不匹配的元素从一个序列复制到另一个序列。呼唤

remove_copy_if(vec1.begin(), vec1.end(), vec2.begin(), compare);

假设有一个合适的序列从 vec2.begin() 开始,但实际上并非如此:什么都没有。如果 vec2 没有任何内存 reserve()d,您可能会崩溃。你想要的是一个迭代器,它可以根据需要扩展序列:

std::remove_copy_if(vec1.begin(), vec1.end(), std::back_inserter(vec2), compare);

有了这个调用 reserve() 就不是必需的了,这只是一个潜在的性能优化。

关于c++ - 为什么 remove_copy_if 返回一个空 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12046719/

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