【发布时间】:2013-05-18 21:12:17
【问题描述】:
我有一个名为“ntuple”的容器,它本质上是一个 C 数组和长度。它的主要目的是作为多维数学函数的参数。到目前为止,它真的很快,并且利用了表单的多个构造函数
ntuple(double x, double y, double z)
{
size = 3;
vec = new double[size];
vec[0] = x;
vec[1] = y;
vec[2] = z;
}
每次我使用更高维度但已知的函数时,我只需添加一个新的构造函数。我也有一个数组:
ntuple(double* invec, long unsigned insizesize)
为了使我的代码与常规 c++ 代码更兼容,我应该实现一个 ntuple 迭代器类吗?我所做的一切都不需要一个,似乎它只会减慢一切。但是我读得越多,为了与标准 C++ 代码兼容而使用迭代器似乎就越重要。
我担心当有人尝试使用我的代码时,它与他们期望使用的标准技术不能很好地结合。但我的 ntuple 类的目的只是将参数带入函数中。
我是否应该以降低代码速度为代价实现迭代器作为预防措施(如果其他人会尝试在其上使用 STL)?
谢谢。
【问题讨论】:
-
正确实现的迭代器不会影响其他任何东西的速度。
-
您的
ntuple不是std::vector<double>有什么原因吗?这个理由有用吗? -
@user2303321 在 32 位的 MSVC2012 中,
sizeof(std::vector)是 12 字节。您的课程似乎至少有 8 个字节。您正在进行手动内存管理,因为您不希望函数参数大 4 个字节?push_back和所有其他方法的存在不会增加std::vector实例的大小,也不会影响使用它的运行时成本。您可以将参数设为std::vector<double> const&,并且您有一个不可变的doubles 的不可变容器,几乎可以肯定它比ntuple写得更好...... -
@user2303321 没有。成员函数不占用实例中的空间。而且你不会在你的类中存储一个迭代器,当被问到时你会产生一个迭代器。
-
@user2303321:成员函数当然不会占用对象中的空间。但是很高兴看到您在决定哪种解决方案最好之前甚至没有费心进行测量,根据您的说法,这是对性能非常敏感的代码。很高兴看到这里维护着最引以为豪的计算机科学传统......