Почему C++ не заботится об итераторах, когда вставка выполняется в вектор после достижения емкости?

Я написал этот небольшой код только для того, чтобы увидеть, как итератор на самом деле становится недействительным и не указывает на измененное местоположение вектора после того, как его емкость достигнута.

Здесь размер вектора и пропускная способность изначально равны 5 . После этого я вставил несколько других элементов в вектор и не повторно инициализировал свой итератор, чтобы он указывал на myvector.begin(). Это приводит к нежелательному значению 49в моем выводе после максимальный размер вектора: 1073741823при повторной печати элементов вектора.

Мой вопрос: почему C++ не возвращает итератор точки к действительному myvector.begin()после того, как все элементы скопированы в новое место?
Это также может привести к некоторому поведению, которое трудно отладить. Я знаю, что безопасным способом работы было бы всегда повторно инициализировать итератор непосредственно перед его использованием.

  #include<iostream>
  #include<vector>
  #include<stdio.h>

  using namespace std;

  int main()
  {
    vector<int> myvector;
    vector<int>::iterator it;
    int myarray[]= {100,200,300,400};
    myvector.insert(it,500);
    it=myvector.begin();
    myvector.insert(it,myarray,myarray+4);
    it=myvector.begin();
    for(;it!=myvector.end();++it)
    cout <<*it<<endl;
    cout <<"size of vector is :" << myvector.size() <<"\n"; 
    cout <<"capacity of vector is : " << myvector.capacity()<<"\n";  
    cout <<"maximum size of vector is : " << myvector.max_size()<<"\n"; 
    myvector.push_back(600);
    for(;it!=myvector.end();++it)
    cout <<*it<<endl;
  }
  Output of program :-
  100
  200
  300
  400
  500
  size of vector is :5
  capacity of vector is : 5
  maximum size of vector is : 1073741823
  49
  100
  200
  300
  400
  500
  600
5
задан Mat 30 April 2012 в 17:33
поделиться