Я пишу собственный векторный класс, и мне нужно иметь функцию стирания без фактического использования vector :: erase ();
Мне нужна та же функциональность, используя только то, что я могу написать вместе снесколько других предварительно выполненных методов, таких как resize (), reserve (), pop и push_back. Единственный параметр, который требуется, это итератор. Мой вектор специально содержит несколько списков. Элемент, на который указывает итератор, должен быть удален, а остальная часть вектора осталась прежней.
Вот некоторые из методов, которые у меня уже есть:
void resize( int newSize )
{
if( newSize > theCapacity )
reserve( newSize * 2 );
theSize = newSize;
}
void reserve( int newCapacity )
{
if( newCapacity < theSize )
return;
Object *newArray = new Object[ newCapacity ];
for( int k = 0; k < theSize; ++k )
newArray[ k ] = std::move( objects[ k ] );
theCapacity = newCapacity;
std::swap( objects, newArray );
delete [ ] newArray;
}
// Stacky stuff
void push_back( const Object & x )
{
if( theSize == theCapacity )
reserve( 2 * theCapacity + 1 );
objects[ theSize++ ] = x;
}
// Stacky stuff
void push_back( Object && x )
{
if( theSize == theCapacity )
reserve( 2 * theCapacity + 1 );
objects[ theSize++ ] = std::move( x );
}
void pop_back( )
{
if( empty( ) )
throw UnderflowException{ };
--theSize;
}
Это такая вещьвозможно?