C++ 用n维C++;向量类?
我有自己的数学向量类,我在代码中使用它。我有一个新的需要将我的向量类推广到n维而不是仅仅两维 我的问题是,实现操作符重载的最佳方法是什么,这样做是否会带来很大的开销 现在,我将这些值存储在一个数组中C++ 用n维C++;向量类?,c++,performance,vector,C++,Performance,Vector,我有自己的数学向量类,我在代码中使用它。我有一个新的需要将我的向量类推广到n维而不是仅仅两维 我的问题是,实现操作符重载的最佳方法是什么,这样做是否会带来很大的开销 现在,我将这些值存储在一个数组中 double *vals; .... vals = new double[dimension]; 这样,我实现了+运算符,如下所示: Vector Vector::operator+(Vector v) { Vector ret = Vector(dimension); for
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+(const Vector &v) {
第二,大多数编译器实现了这一点,这将有助于消除多维实现中的本地ret
当然,最好的方法是实现代码,对其进行基准测试,然后在必要时应用优化。Scott Meyers’是您在这里尝试做的这类事情的一个很好的参考资料。如果您想要一个快速向量类,请使用模板的大小:
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;
}
模板
类向量{
双数据[大小];
公众:
双精度&运算符[](std::size_t x){返回数据[x];}
};
模板
向量运算符+(向量lhs、常量向量和rhs){
对于(标准::大小\u t i=0;i
只有当您想重新调整它们的大小,或者它们非常大时,才不需要动态调整它们的大小
有很多方法可以比这快得多,比如SSE。如果你想要高度优化的东西,你应该使用一个专用的数学库。哎呀,绝对想要!在这个特殊的例子中,RVO不会被调用。如果它实际上没有返回ret,它就不会被调用代码>。。。但是假设返回了
ret
,为什么不返回呢?
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;
}