Мне нужно обернуть векторный итератор, но мне не нравится идея переписать его с нуля. И я не могу выделить его подкласс, поскольку векторный итератор не является кроссплатформенным. По крайней мере, 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;
Где вектор индексов содержит целочисленные позиции в векторе данных. Предполагается, что данные будут намного больше, чем индексы.
Так что мне нужен итератор, который может проходить через индексы в любом направлении, как итератор нормального вектора, с единственным исключением: он должен возвращать значение вектора данных, когда к нему будет осуществляться доступ. e.g.:
for(MyContainer::iterator it = cont.begin(); it != cont.end(); it++) {
cout << *it << endl; // values of data should appear here
}
По сути, это должно выглядеть как обычная коллекция для стандартного мира. Вы можете перебирать его в любом нужном вам направлении, можете сортировать, запускать уникальные команды, find_if и т. Д. *
любое простое решение?