gpt4 book ai didi

c++ - 重载 = 自制 vector 类的运算符

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:02 27 4
gpt4 key购买 nike

我开始编写自己的 vector 类,然后着手重载 = 运算符。我在下面有类似 somevector = someothervector 的代码,尽管我不确定它是否正确,因为我一直在为类似 somevector[0] = 5 用于给我的 vector 值。

myVector& myVector::operator=(const myVector &obj)
{
myVector tem(obj.Size()); //make new empty vector of the needed size then fill below

for (int i = 0; i <= tem.size; ++i)
{
tem.array[i] = obj.array[i];
}

return tem;
}

我有以下用于读取 vector 元素的 [] 重载,但由于它只是返回元素的值,而且我不确定如何修复它以进行赋值,我认为这可能是我的主要问题。

int myVector::operator[](int ind)
{
if ( (ind >= 0) && (ind < size) )
{ return array[ind]; }

return 0;
}

有人可以就此提供一些建议吗?

最佳答案

您想在 this 上操作,而不是在临时的上操作。

也就是说,您正在分配给当前对象的数据成员

类似的东西:

myVector& myVector::operator=(const myVector &obj)
{
// insert appropriate code here to ensure your array's capacity is sufficient
// to hold obj.size ints

size = obj.size;
for (int i = 0; i < size; ++i)
{
array[i] = obj.array[i];
}

return *this;
}

要启用您请求的语法 (somevector[0] = 5),您的数组下标运算符必须返回对存储对象的引用,否则您将在一个临时的。如果索引不正确,您可能希望在索引不存在时抛出异常。

int& myVector::operator[](unsigned ind)
{
if (ind < size)
return array[ind];

throw std::out_of_range("invalid index");
}

关于c++ - 重载 = 自制 vector 类的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com