Почему я получаю "векторные итераторы несовместимыми"?
Почему этот код
#include <algorithm>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.reserve(v.size() * 2); // Reserve enough space to keep iterators valid
std::copy(v.begin(), v.end(), std::back_inserter(v));
return 0;
}
дать мне ошибку утверждения отладки, выражение: векторные итераторы несовместимы (Visual С++ 2008)?
Ответы
Ответ 1
Итераторы, соответствующие элементам, становятся недействительными только при перераспределении вектора, который reserve
избегает.
Однако v.end()
не останется действительным.
Стандартное описание push_back
и insert
гарантирует, что
Вызывает перераспределение, если новый размер больше старой. Если перераспределение не происходит, все итераторы и ссылки до момента ввода остаются в силе.
v.end()
не "до точки вставки".