C++ 如果不使用Vector::erase(),如何编写自定义Vector方法来删除元素?

C++ 如果不使用Vector::erase(),如何编写自定义Vector方法来删除元素?,c++,vector,C++,Vector,我正在编写一个自定义的vector类,我需要有一个擦除函数,而不需要实际使用vector::erase() 我需要同样的功能,只使用我能写的东西以及一些其他预完成的方法,如resize()、reserve()、pop和push_back。它使用的唯一参数是迭代器。我的向量就是一堆列表。迭代器指向的元素应该被删除,向量的其余部分保持不变 以下是我已经使用过的一些方法: void resize( int newSize ) { if( newSize > theCap

我正在编写一个自定义的vector类,我需要有一个擦除函数,而不需要实际使用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;
    }

void resize(int newSize)
{
如果(新闻大小>容量)
保留(新闻大小*2);
大小=新闻大小;
}
无效储备(新容量)
{
if(新容量<尺寸)
返回;
Object*newArray=新对象[newCapacity];
对于(int k=0;k

这是可能的吗?

通常std::vector::erase手动调用dtor,使用placement new将元素复制(或移动)到该间隙中,然后修改结束迭代器

使用迭代器的简单实现:

void erase(Iterator<Object> it) {
    while (next(it) != end()) {
        *it = *next(it); // or std::move(*next(it))
        it  =  next(it);
    }
    --theSize;
    end()->Object::~Object(); // not necessary -- assumes updated end()
}
void擦除(迭代器){
while(next(it)!=end(){
*it=*next(it);//或std::move(*next(it))
it=下一个(it);
}
--大小;
end()->Object::~Object();//不必要--假定已更新end())
}

您在内部将向量表示为指向第一个元素和元素数的指针?OT:希望您知道您的
向量
std::vector
的工作方式非常不同。例如,在
reserve
中创建新的
对象
s(这要求它们是默认可构造的),在同一函数中移动并分配
对象
s而不是移动并构造它们,或者在
推回
中分配
对象
s而不是就地构造它们。