機能

2013-08-29 8 views
6

にイテレータとベクトルを渡す私はいくつかの機能を持っている機能

void print_elem(const std::vector<int>::iterator it, const std::vector<int> &vec) {/*.....*/} 

私はベクトルが元のオブジェクトへの参照であることを除外した場合、私はベクトルのコピーを取得します。なぜイテレータには同じことが当てはまりませんか?なぜイテレータは参照である必要がありますか?

たとえば、ベクトルを反復したい場合、各要素を出力し、ベクトルの終わりに達したときに停止したいと思います。ベクトルへの参照を渡さない限り、反復は最初のベクトルコピーを繰り返し続けます。しかし、参照を通過すると、反復は元のベクトルオブジェクトを通過します。しかし、反復子は、参照を持たないベクターのようにコピーされないのはなぜですか?

答えて

10

イテレータはポインタをモデル化しており、であるか、またはベクトルまたはその内容を指している可能性が最も高いです。コピーすると、コピーは実際には別のイテレータになりますが、同じ値を格納するため、ポインタと同じように同じものを指しています。

+0

反復子を参照引数として渡すのは無関係ですか?関数への参照としてイテレータを渡すとエラーになることに注意することは重要です。 const_iteratorの場合はそうではありません。なぜあなたは知っていますか?後者の原因となる違いは何ですか?エラーではありませんか? - ありがとう。 – jlstr