私はベクトルイテレータをラップする必要がありますが、最初から書き直すという考えは嫌いです。そして、私はベクトル反復子がクロスプラットフォームでないように見える限り、それをサブクラス化することはできません。少なくともgnuとibmのものは異なって見えます。ベクトルのインデックスC++でstd :: iteratorをラップします
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;
は、データベクトル内の整数位置が含まれています。私は何をしたいか
は次のとおりです。データは指標よりはるかに大きいと考えられています。
通常のベクトルイテレータのように、インデックスを通過できるイテレータが必要です。唯一の例外は、値にアクセスするときにデータベクトルの値を返す必要があることです。例:
for(MyContainer::iterator it = cont.begin(); it != cont.end(); it++) {
cout << *it << endl; // values of data should appear here
}
基本的にstdワールドの通常のコレクションのように見えます。あなたは、あなたが望むどんな方向にでも反復することができます。あなたはそれをソートし、ユニークなfind_ifを実行することができます。
簡単な解決法はありますか?
私が理解すれば、実際には2倍のベクトルがあり、インデックスベクトルは無意味です。あるいは、私が間違っているかもしれません、あなたが本当に達成しようとしていることについての明確な印象を得ていません。 – birryree
私は2つのベクトルを持っています。 1つに大きなデータセット(10k要素)が含まれています。インデックスは、データセットのサブセットを指します。このように:indices = {1、2、5、1000};私はインデックスベクトル上でそれを行うかのようにコンテナを反復したいが、返される値はデータベクトルから取られなければならない。 –
@birryee、私の推測は、 'indices'ベクトルの値は実際に' data'ベクトルのインデックスであり、 'data'ベクトルの値をイテレータが参照する現在のインデックスに出力したいと考えています。 –