10

set_difference関数を呼び出して、結果をstd::listに入れようとしています。理論的には、これはソートされたコンテナで実行できますよね?

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は空のリストとして返されます。リストコンテナで使えないからですか?

4

2 に答える 2

13

v.begin()が空のシーケンスの始まりだからです。要素はほとんどどこにでもコピーされます。に置き換えますstd::back_inserter(v)。これにより、に挿入する方法を知っているイテレータが得られますv

于 2012-09-03T18:36:54.417 に答える
6

を挿入する出力反復子を指定する必要があります。を使ってみてください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()));
于 2012-09-03T18:39:58.943 に答える