列表容器上的std::set_difference

std::set_difference on list container

本文关键字:set difference std 列表      更新时间:2023-10-16

我正在尝试调用set_difference函数,并将结果放在std::列表中。理论上,在任何排序的容器上都可以这样做,对吧?

list<int> v;         
list<int> l1;  
list<int> l2;                   
list<int>::iterator it;
//l1 and l2 are filled here
l1.sort();
l2.sort();
it=set_difference(
   l1.begin(),
   l1.end(), 
   l2.begin(),
   l2.end(), 
   v.begin()
);

然而,v以空列表的形式返回。是因为我不能在列表容器中使用它吗?

这是因为v.begin()是一个空序列的开头。元素几乎被复制到任何地方。将其替换为std::back_inserter(v)。这将为您提供一个迭代器,它知道如何插入到v中。

您需要提供一个输出迭代器,该迭代器将插入。尝试使用std::inserter

std::list<int> a { 
  10, 10, 10, 11, 11, 11, 12, 12, 12, 13
};
std::list<int> b {
  10
};
std::list<int> diff;
std::set_difference(a.begin(), a.end(), b.begin(), b.end(),
    std::inserter(diff, diff.begin()));