gpt4 book ai didi

c++ - 使用 n 维 C++ Vector 类实现算术运算符重载的更好方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:46 24 4
gpt4 key购买 nike

我在我的代码中使用了自己的数学 Vector 类。我有一个新的需求,就是将我的 vector 类泛化到 n 维而不是仅仅两个维。

我的问题是,实现运算符重载的最佳方式是什么,这样做是否会产生很大的开销?

我现在将值存储在一个数组中

double *vals;
....
vals = new double[dimension];

有了这个,我像这样实现 + 运算符:

Vector Vector::operator+(Vector v) 
{
Vector ret = Vector(dimension);
for (int i = 0; i < dimension; i ++)
{
ret.vals[i] = vals[i] + v.vals[i];
}
}

此操作将完成很多并且必须快速运行。这是否比旧版本差很多(就速度而言)?

Vector Vector::operator+(Vector v) {
return Vector(x + v.x, y + v.y);
}

感谢任何输入!

最佳答案

如果你想要一个快速的 vector 类,那么使用大小模板:

template<std::size_t size>
class Vector {
double data[size];
public:
double& operator[](std::size_t x) { return data[x]; }
};

template<std::size_t size>
Vector<size> operator+(Vector<size> lhs, const Vector<size>& rhs) {
for (std::size_t i = 0; i < size; ++i)
lhs[i] += rhs[i];
return lhs;
}

只有当您想调整它们的大小,或者它们非常大时,才不需要动态调整它们的大小。

有比这更快的方法,例如 SSE。如果您想要高度优化的东西,您应该使用专用的数学库。

关于c++ - 使用 n 维 C++ Vector 类实现算术运算符重载的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8627861/

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