描述:
拷贝容器1中的元素到容器3中,且该元素不在容器2中。
使用该函数前,两个容器需要用std::sort先排序。
定义:
template< class InputIt1, class InputIt2, class OutputIt >
OutputIt set_difference( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
OutputIt d_first );
template< class InputIt1, class InputIt2, class OutputIt >
constexpr OutputIt set_difference( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
OutputIt d_first );
可能的实现:
template<class InputIt1, class InputIt2, class OutputIt>
OutputIt set_difference(InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
OutputIt d_first)
{
while (first1 != last1)
{
if (first2 == last2)
return std::copy(first1, last1, d_first);
if (*first1 < *first2)
{
*d_first++ = *first1++;
}
else
{
if (! (*first2 < *first1))
{
++first1;
}
++first2;
}
}
return d_first;
}
参数:
first1, last1 - 容器1范围
first2, last2 - 容器2范围
d_first - 目标容器范围的起始位置
返回值:
返回构造的范围的尾后迭代器。
示例:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v1{ 1, 2, 5, 5, 5, 9 };
std::vector<int> v2{ 2, 5, 7 };
std::vector<int> diff;
std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(),
std::inserter(diff, diff.begin()));
for (auto i : diff) std::cout << i << ' ';
std::cout << '\n';
//1 5 5 9
}