c++ - 即使不需要也实现迭代器? C++

标签 c++ stl iterator

我有一个名为“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)?

谢谢。

最佳答案

为 C 数组的包装器实现迭代器很简单——只需返回指向第一个和最后一个元素的指针即可 beginend分别向 POD 类添加非虚拟方法不会减慢任何事情的速度。通过这些方法访问数组不会比使用数组索引查找慢,而且在某些情况下可能更快。如果您不使用它们,您的代码将不会运行得更慢。

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

因为这似乎是一个 X/Y 问题,我怀疑你的问题之一是你不应该使用你的 ntuple根本上课。 std::vector<double>已经是一个写得很好的 C 风格数组的薄包装器。要通过它而无需复制它,std::vector<double> const& .

顺便说一句,STL 指的是 std 的模板组件所在的库。被派生。它与 std 略有不同图书馆在几个方面。

关于c++ - 即使不需要也实现迭代器? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16629001/

相关文章:

c++ - 两个相同大小的类之间的实际差异,其成员都是位标志

c++ - operator new 已经有一个主体

c++ - C++ 中运算符优先级的困惑

c++ - 忽略第一个元素的插入排序算法

java - 如何在没有克隆开销的情况下获得集合/映射的固定状态迭代器

Java - 何时使用迭代器?

python - 为什么一个类需要 __iter__() 来返回一个迭代器?

c++ - 带有自定义构造函数的自定义 STL 分配器

c++ - 通过引用传递给 STL 容器的对象的生命周期

c++ - set::vector 初始化用数字引号