假设我有一个std::vector<int>
,使用一个简单的操作来复制偶数元素:
#include <vector>
int main()
{
std::vector<int> v = {1, 2, 3, 4, 5, 6};
std::vector<int> even;
std::copy_if(std::make_move_iterator(v.begin()), std::make_move_iterator(v.end()), std::back_inserter(even), [](int i){return i%2 == 0;});
return 0;
}
我的问题是,如何将上述方法与任何其他方法相结合,以从复制到向量even
的向量v
中移除元素
2条答案
按热度按时间pb3skfrl1#
我不建议在这里使用
std::copy_if
,而是使用std::stable_partition
将偶数元素移动到v
的末尾,使用向量构造函数将这部分复制到even
,然后从v
中删除复制的元素:对于复制开销很大的对象,您可能希望在创建
even
时使用std::move_iterator
,如@MooningDucks回答中所建议的:wfauudbj2#
我会改用
std::remove_if
,并让传递给remove_if
的函数与另一个向量相加,这就得到了