#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,为什么?

解决方案 »

  1.   

    我用size()判断了下,结果是2,郁闷中。
      

  2.   

    iter=vStr.erase(iter);
    如果iter是最后一个元素,那么返回的迭代器将指定end()
    所以再做星号操作是错误的。
    至于这里为什么等于3,是因为vector容器的线性特性(以及删除元素不压缩空间特性)决定的,其它容器可不一定是这样,甚至会崩溃。
      

  3.   

    删除元素不压缩空间特性是指:
    比如有三个元素的vector,你删除最后一个,vector只是修改了一下size的大小,数组并没有重新分配,所以这个vector所占的内存仍然和删除之前一样大,这是效率优先原则,否则就要重新申请数组,并且拷贝原数组内容了。