Этот код проблематичен в том смысле, что он создает 1000 элементов типа T, даже если он логически пуст. Кроме того, если имеется более 1000 вставок, верхние элементы отбрасываются.
Что касается проблем компиляции, я пытаюсь скомпилировать код с Vector<int>
, и он компилируется нормально, но вылетает. По той же причине он падает с Vector<int>
, но не компилируется с Vector<std::string>
. Проблема имеет тип *i
, то есть std::string
в случае Vector<std::string>
. Либо используйте итератор полностью, либо используйте индексы, но не смешивайте. Использование итераторов:
for(Vector<T>::iterator i=&items[998]; i>=position; i--)
{
*(i+1)=*i;
}
Редактировать:
[Только что заметил ответ Шеффа, который понял это после завершения редактирования]
Вышеуказанное вызывает неопределенное поведение для v.insert(v.begin(), value)
, поскольку i
повторяется до items
. Чтобы избежать этого, итерация должна прекратиться до того, как она упадет items
:
for(Vector<T>::iterator i=&items[999]; i > position; i--)
{
*i = *(i-1);
}
Также обратите внимание, что строка, следующая за циклом, также должна быть фиксированной:
items[*position]= item; // <--- BUG: also mixing indexes and iterators
Или используя индексы:
for(int i= 998; begin() + i>=position; i--)
{
items[i+1]=items[i];
}