vector<int> num;
for (int i=0; i<10; ++i)num.push_back(i);
num.push_back(10);
num.push_back(10);
cout << "Original array:
";
//vector<int>::iterator it; //C++11之前用的,11之后可以用auto
for (auto it=num.begin(); it!=num.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
num.insert(num.begin()+2,3,10); //在num[2]之前加3个10
cout << "Inserted array:
";
for (auto it=num.begin(); it!=num.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
//delete 10
for (auto it=num.begin(); it!=num.end(); ++it)
{
if ( *it == 10 )
{
num.erase(it); //删除it指向的元素,后it自动指向下一个元素;所以不用移动it了,为了中和 ++it,才有 --it
--it;
}
} // num.erase(remove(num.begin(),num.end(),10),num.end());//这句可以代替上面的整个for循环
cout << "Deleted 10 array:
";
for (auto it=num.begin(); it!=num.end(); ++it)
{
cout << *it << " ";
}
for (auto it=num.begin(); it!=num.end(); ++it)
{
if ( *it == 10 )
{
num.erase(it); //删除it指向的元素后,it自动指向下一个元素;所以不用移动it了,为了中和 ++it,才有 --it
--it;
}
}
或者
for (auto it=num.begin(); it!=num.end();)
{
if ( *it == 10 )
num.erase(it);
else
++it;
}
或者
num.erase(remove(num.begin(),num.end(),10),num.end());//这句可以代替上面的整个for循环
运行结果:

注意:在VS2013中,以下代码会出错
//delete 10 for (auto it = num.begin(); it != num.end(); ++it) { if (*it == 10) { num.erase(it); // --it; // VS2013这会有问题,应该是erase导致的it无效,但使用MinGW g++编译(C++ 11标准)是可以的。 } } ////// vs2013 下,要这样写 //// for (auto it = num.begin(); it != num.end(); ++it) { if (*it == 10) { it = num.erase(it); // --it; } } 或 for (auto it = num.begin(); it != num.end(); ) { if (*it == 10) { it = num.erase(it); } else ++it; }
VS2013出现的错误:vector iterator not decrementable。 或者,vector iterators incompatible

成员函数 insert() 用来插入元素:返回 iterator 指向新插入元素的头

用erase() 来删除某一位置元素,返回 iterator 指向被删除的元素的尾。
C++98声明:
iterator erase (iterator position); iterator erase (iterator first, iterator last);
C++11声明:
iterator erase (const_iterator position); iterator erase (const_iterator first, const_iterator last);
Removes from the vector either a single element (position) or a range of elements ([first,last)).
而pop_back() 是表示弹出最后一个元素,无参数,无返回值。

- vector 的迭代器

或者:
