即使不需要也可以实现迭代器?C++

use*_*321 1 c++ iterator stl

我有一个名为"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),代价是放慢我的代码?

谢谢.

Yak*_*ont 5

周边的一个C数组的包装实现迭代器是微不足道的-只是返回指向第一个,也是一个过去最最后,元素beginend分别,并添加非虚方法到POD类不会有太大的放慢任何事情.通过这些方法访问数组不会比使用数组索引查找慢,并且在某些上下文中可以更快.如果你不使用它们,你的代码将不会运行得更慢.

作为一个优势,在C++ 11中,如果你有一个beginend方法,std::begin并且std::end会找到它,并且for( auto x: container ) { /* code */ }会对你的类型起作用.

由于这似乎是一个X/Y问题,我怀疑你的一个问题是你根本不应该使用你的ntuple课程. std::vector<double>已经很好地编写了一个C风格数组的薄包装器.要传递它而不需要复制它的成本,std::vector<double> const&.

除了迂腐之外,STL指的std是从中导出模板组件的库.它std在某些方面与图书馆略有不同.