我正在阅读 Josuttis “The C++ Standard Library, 2nd ed.”。在第 6.7.1 节中,作者解释说下面给出的代码会产生意想不到的结果。我仍然不知道如何std::remove()
运作,以及为什么我会得到这个奇怪的结果。(虽然我知道你需要使用std::erase()
才能真正删除元素,实际上最好使用list::erase()
而不是std::remove()
& `std::remove() 的组合更好)。
list<int> coll;
// insert elements from 6 to 1 and 1 to 6
for (int i=1; i<=6; ++i) {
coll.push_front(i);
coll.push_back(i);
}
// print
copy (coll.cbegin(), coll.cend(), // source
ostream_iterator<int>(cout," ")); // destination
cout << endl;
// remove all elements with value 3
remove (coll.begin(), coll.end(), // range
3); // value
// print (same as above)
结果是
pre: 6 5 4 3 2 1 1 2 3 4 5 6
post: 6 5 4 2 1 1 2 4 5 6 5 6 (???)