在C++中包装std :: iterator

nov*_* Li 4 c++ iterator

我需要包装一个矢量迭代器,但不喜欢从头开始重写它的想法.而且我不能将它子类化,因为矢量迭代器似乎不是跨平台的.至少gnu和ibm看起来不同.

我想做的是以下内容:

class MyContainer {
    vector<double> data;
    vector<int> indices;

    iterator
    begin()
    { return my_iterator(data, indices.begin()); }

    iterator
    end()
    { return my_iterator(data, indices.end()); }
}

MyContainer  cont;
Run Code Online (Sandbox Code Playgroud)

其中索引向量包含数据向量内的整数位置.数据应该比指数大得多.

所以我需要一个迭代器,它可以在任何方向上遍历索引,就像普通的向量迭代器那样唯一的例外:当要访问该值时,它必须返回数据向量的值.例如:

for(MyContainer::iterator it = cont.begin(); it != cont.end(); it++) {
    cout << *it << endl; // values of data should appear here
}
Run Code Online (Sandbox Code Playgroud)

基本上它应该看起来像std世界的正常集合.你可以在任何你想要的方向迭代它,你可以对它进行排序,运行唯一,find_if等...

任何简单的方案?

Dan*_*röm 6

有一个很棒的Boost库用于定义自定义迭代器.您需要提供一些具有几种方法的类:

i.dereference()  Access the value referred to
i.equal(j)       Compare for equality with j
i.increment()    Advance by one position
i.decrement()    Retreat by one position
i.advance(n)     Advance by n positions
i.distance_to(j) Measure the distance to j
Run Code Online (Sandbox Code Playgroud)

然后你从iterator_facade得到其余的.

祝好运!