增加矢量容量
Increase capacity for vector
免责声明 1 - 我是编程新手
免责声明 2 - 我搜索了又搜索,但找不到我正在寻找的帮助。
对于一个项目,我或多或少地以更精简的形式重写了矢量 class。我挂断的部分是编写 push_back 方法。一切都很好,直到我不得不增加阵列的容量。
我假设应该做的是创建一个大小增加的新向量,然后将元素从旧向量复制到新向量,然后使用赋值运算符将 oldVector 赋值给 newVector。
我要么错误地编写了我的 push_back 方法,错误地重载了 = 运算符,要么我只是对应该发生的事情缺乏理解。任何帮助将不胜感激。
编译时,我在分配 this = tempV
的那一行收到错误 "lvalue required as left operand of assignment"
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() 作为方法。修复后,代码编译并运行,但是我的向量的容量是一样的,并没有像我预期的那样增加。我仍然缺少一些东西。上面的代码已经更新。
再次感谢 any/all 帮助!
为什么要创建一个新的 Vector<T>
?只需创建一个新数组:
template <class T>
void Vector <T> :: push_back(const T & number)
{
if(numItems == capacity)
{
capacity *= 2;
T* newData = new T[capacity];
std::copy(data, data + numItems, newData);
delete[] data;
data = newData;
}
data[numItems++] = number;
}
免责声明 1 - 我是编程新手 免责声明 2 - 我搜索了又搜索,但找不到我正在寻找的帮助。
对于一个项目,我或多或少地以更精简的形式重写了矢量 class。我挂断的部分是编写 push_back 方法。一切都很好,直到我不得不增加阵列的容量。
我假设应该做的是创建一个大小增加的新向量,然后将元素从旧向量复制到新向量,然后使用赋值运算符将 oldVector 赋值给 newVector。
我要么错误地编写了我的 push_back 方法,错误地重载了 = 运算符,要么我只是对应该发生的事情缺乏理解。任何帮助将不胜感激。
编译时,我在分配 this = tempV
的那一行收到错误 "lvalue required as left operand of assignment"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() 作为方法。修复后,代码编译并运行,但是我的向量的容量是一样的,并没有像我预期的那样增加。我仍然缺少一些东西。上面的代码已经更新。
再次感谢 any/all 帮助!
为什么要创建一个新的 Vector<T>
?只需创建一个新数组:
template <class T>
void Vector <T> :: push_back(const T & number)
{
if(numItems == capacity)
{
capacity *= 2;
T* newData = new T[capacity];
std::copy(data, data + numItems, newData);
delete[] data;
data = newData;
}
data[numItems++] = number;
}