#include <iostream>
using namespace std;
#include <vector>
void main()
{
vector<int> vStr;
vStr.push_back(1);
vStr.push_back(2);
vStr.push_back(3);
cout << "------------------------\n";
vector<int>::iterator iter = vStr.begin(),first,second;
bool iss=true;
first=iter;
iter++;
second=iter;
iter++;
cout << "-------------------------\n";
cout << *first << endl;
cout << *second << endl;
cout << *iter << endl;
iter=vStr.erase(iter);
cout << *iter << endl;
system("pause");
} 最后结果两个3,为什么?
using namespace std;
#include <vector>
void main()
{
vector<int> vStr;
vStr.push_back(1);
vStr.push_back(2);
vStr.push_back(3);
cout << "------------------------\n";
vector<int>::iterator iter = vStr.begin(),first,second;
bool iss=true;
first=iter;
iter++;
second=iter;
iter++;
cout << "-------------------------\n";
cout << *first << endl;
cout << *second << endl;
cout << *iter << endl;
iter=vStr.erase(iter);
cout << *iter << endl;
system("pause");
} 最后结果两个3,为什么?
如果iter是最后一个元素,那么返回的迭代器将指定end()
所以再做星号操作是错误的。
至于这里为什么等于3,是因为vector容器的线性特性(以及删除元素不压缩空间特性)决定的,其它容器可不一定是这样,甚至会崩溃。
比如有三个元素的vector,你删除最后一个,vector只是修改了一下size的大小,数组并没有重新分配,所以这个vector所占的内存仍然和删除之前一样大,这是效率优先原则,否则就要重新申请数组,并且拷贝原数组内容了。