对于vector一般不要用erase(),因为很多情况下他要和
if (*iter%2 == 0)
ivec.erase(remove(ivec.begin(), ivec.end(), *iter), ivec.end())
但如果你用if (*iter%2 != 0)
ivec.erase(remove(ivec.begin(), ivec.end(), *iter), ivec.end())
输出结果则包含11,结果错误!
不知道你为什么数组,向量,链表都用,为了和你一致,我也只能改成这样:
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
vector
list
int vec[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
remove_copy_if (vec, vec+10, back_inserter(ivec),
bind2nd(modulus
remove_copy_if (vec, vec+10, back_inserter(ilis),
not1(bind2nd(modulus
for (vector
iter != ivec.end(); ++iter)
cout << *iter << '\t';
cout << endl;
for (list
liter != ilis.end(); ++liter)
cout << *liter << '\t';
cout << endl;
}
最好的做法是:
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
vector
for (int i = 2; i != 12; ++i)
ivec.push_back(i);
remove_copy_if (ivec.begin(), ivec.end(),
back_inserter(even_vec), bind2nd(modulus
remove_copy_if (ivec.begin(), ivec.end(),
back_inserter(odd_vec), not1(bind2nd(modulus
copy (even_vec.begin(), even_vec.end(),
ostream_iterator
cout << endl;
copy (odd_vec.begin(), odd_vec.end(),
ostream_iterator
cout << endl;
}