#c #vector #erase
#c #вектор #стереть
Вопрос:
void reserve( int newCapacity ){
Object *oldArray = objects;
int numToCopy = newCapacity < theSize ? newCapacity : theSize;
newCapacity = SPARE_CAPACITY;
objects = new Object[newCapacity];
for( int k=0; k < numToCopy; k )
objects[k] = oldArray[k];
theSize = numToCopy;
theCapacity = newCapacity;
delete [ ] oldArray;
}
Как я могу реализовать метод erase, возможно, используя reserve()?
iterator erase ( iterator position ){
if (position 1 != end())
copy(position 1, finish, position);
--finish;
return position;
}
Комментарии:
1. Рассматривали ли вы возможность просмотра существующих реализаций с открытым исходным кодом?
2. ну, я посмотрел исходный код stl, но он был сложным.
3. Что-то не так с
std::vector
?4. Тогда самое интересное должно заключаться в поиске ответа, а не в том, чтобы просить об этом 😉
5. Что ж, я уже закончил реализацию своего собственного векторного класса. Это было весело 🙂
Ответ №1:
Похоже, это должно сработать:
iterator erase ( iterator position ) {
copy(position 1, end(), position);
resize(size()-1);
return position;
}
iterator erase ( iterator first, iterator last ) {
copy(last, end(), first);
resize(size()-(last-first);
return first;
}