为什么不从myset
中减去第二组? myset.insert(second.begin(),second.end())
可以正常工作。
// erasing from set
int main ()
{
std::set<int> myset;
std::set<int> second;
std::set<int>::iterator it;
// insert some values:
for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
for (int i=3; i<5; i++) second.insert(i*10);
myset.erase(second.begin(), second.end()); // Why is the second set not subtracted from myset? myset.insert(second.begin(),second.end()) works as intended.
std::cout << "myset contains:";
for (it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
答案 0 :(得分:3)
std::set::erase
需要迭代器来调用它。将迭代器赋予另一个集合将不起作用。您想要的是std::set_difference
,您将其传递给这两个集合,它将输出一个新集合,该集合包含第一个集合中所有元素的第二个集合中的所有元素。对你来说看起来像
std::set diff;
std::set_difference(myset.begin(), myset.end(),
second.begin(), second.end(),
std::inserter(diff, diff.begin()));
答案 1 :(得分:1)
erase将迭代器带入正在处理的集合中
Removes the elements in the range [first; last), which must be a valid range in *this.