gpt4 book ai didi

c++ - 为第二个范围内的重复项设置差异,替代 remove_copy

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:33 28 4
gpt4 key购买 nike

我有两个数组或 vector ,比如说:

  int first[] = {0,0,1,1,2,2,3,3,3};
int second[] = {1,3};

我想去掉第一组中的 1s 和 3s,set_difference 只能去掉这些值的第一次出现,但这不是我想要的。

我是否应该通过迭代第二个范围并每次从第一个集合中删除一个条目来使用 remove_copy 来执行此操作。

在 C++ 中执行此操作的最佳方法是什么?

最佳答案

写一个专门的set_difference:

template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
OutputIterator set_difference_any( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result )
{
while ( first1 != last1 && first2 != last2 )
if ( *first1 < *first2 ) {
*result = *first1;
++first1;
++result;
} else if ( *first2 < *first1 ) {
++first2;
} else {
++first1;
//++first2; // this is the difference to set_difference
}
return std::copy( first1, last1, result );
}

然后将其应用到问题中:

#include "set_difference_any.h"
#include <boost/range.hpp>
#include <iterator>
#include <vector>

std::vector<int> result;
set_difference_any( boost::begin( first ), boost::end( first ),
boost::begin( second ), boost::end( second ),
std::back_inserter( result ) );

此算法是线性的(最大 last1-first1 + last2-first2 比较)

关于c++ - 为第二个范围内的重复项设置差异,替代 remove_copy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818687/

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