我需要包装一个向量迭代器,但不想从头开始重写它。而且我无法对其进行子类化,因为向量迭代器似乎不是跨平台的。至少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;
indices向量包含数据向量内的整数位置。数据应该比索引要大得多。
因此,我需要一个迭代器,可以像普通向量迭代器一样沿任何方向遍历索引,但唯一的例外是:当要访问值时,它必须返回数据向量的值。例如:
for(MyContainer::iterator it = cont.begin(); it != cont.end(); it++) {
cout << *it << endl; // values of data should appear here
}
基本上它应该看起来像标准世界中的普通集合。您可以按任何方向迭代它,可以对其进行排序、运行唯一性查找、find_if等操作... 有没有简单的解决方案?