我有一个名为"ntuple"的容器,它本质上是一个C数组和长度.它的主要目的是成为多维数学函数的论证.到目前为止,它真的很快并且使用了几种形式的构造函数
ntuple(double x, double y, double z)
{
size = 3;
vec = new double[size];
vec[0] = x;
vec[1] = y;
vec[2] = z;
}
Run Code Online (Sandbox Code Playgroud)
每次我使用更高维度但已知的函数时,我只需添加一个新的构造函数.我也有一个数组:
ntuple(double* invec, long unsigned insizesize)
Run Code Online (Sandbox Code Playgroud)
为了使我的代码与常规c ++代码更兼容,我应该实现一个ntuple迭代器类吗?我所做的一切都不需要,看起来它只会减慢一切.但是我读的越多,为了与标准C++代码兼容,使用迭代器似乎越重要.
我担心当有人试图使用我的代码时,它将无法与他们期望使用的标准技术很好地融合.但是我的ntuple类的目的只是将参数带入函数中.
我是否应该作为预防措施实现迭代器(如果其他人会尝试在其上使用STL),代价是放慢我的代码?
谢谢.
周边的一个C数组的包装实现迭代器是微不足道的-只是返回指向第一个,也是一个过去最最后,元素begin和end分别,并添加非虚方法到POD类不会有太大的放慢任何事情.通过这些方法访问数组不会比使用数组索引查找慢,并且在某些上下文中可以更快.如果你不使用它们,你的代码将不会运行得更慢.
作为一个优势,在C++ 11中,如果你有一个begin和end方法,std::begin并且std::end会找到它,并且for( auto x: container ) { /* code */ }会对你的类型起作用.
由于这似乎是一个X/Y问题,我怀疑你的一个问题是你根本不应该使用你的ntuple课程. std::vector<double>已经很好地编写了一个C风格数组的薄包装器.要传递它而不需要复制它的成本,std::vector<double> const&.
除了迂腐之外,STL指的std是从中导出模板组件的库.它std在某些方面与图书馆略有不同.