免责声明1-我是编程新手
免责声明2-我进行了搜索,但找不到所需的帮助。

对于一个项目,我或多或少以更简化的形式重写了矢量类。我最忙的部分是编写push_back方法。一切顺利,直到我必须增加阵列的容量为止。

我假设应该做的是创建一个具有增大大小的新矢量,然后将元素从旧矢量复制到新矢量,然后使用赋值运算符将oldVector分配给newVector。

我或者错误地编写了push_back方法,错误地重载了=运算符,或者我只是对应该发生的事情缺乏了解。任何帮助将不胜感激。

编译时,在我将其赋值为tempV的那一行上出现错误“左值要求为赋值左操作数”

template <class T>
Vector<T>& Vector<T>::operator = (const Vector<T> & v)
{
    int newSize = v.size();
    int newCapacity = v.getCapacity();
    data = new T[newCapacity];
    for(int i = 0; i < newSize; i++)
        data[i] = v.data[i];
    return *this;
}

template <class T>
void Vector <T> :: push_back(const T & number)
{
    if(numItems == capacity)
    {
        Vector <T> tempV(this->capacity * 2);
        for(int i = 0; i < numItems; i++)
            tempV.data[i] = data[i];
        *this = tempV;
    }
    if(numItems < capacity)
        data[numItems++] = number;
}


更新
所以我明白了为什么我的代码在使用时无法编译

*this = tempV;


在我的复制方法中,我使用v.size而不是v.size()作为方法。修复该问题后,代码将编译并运行,但是我的向量的容量是相同的,并且没有增加我所期望的。我仍然想念一些东西。上面的代码已更新。

再次感谢您提供的所有帮助!

最佳答案

为什么必须创建一个新的Vector<T>?只需创建一个新数组:

09-10 04:02
查看更多