2016-11-03 13 views
-1

イテレータが演算子+と演算子 - をオーバーロードしてイテレータを返すと仮定しました。私はまた、イテレータがオーバーロードしていたことを、次のコンパイル製のオペレータはint()、仮定:std :: iteratorの演算子

std::vector<int> v; 
v.push_back(1); 
v.push_back(2); 
v.push_back(3); 

std::vector<int>::iterator low = std::lower_bound(v.begin(), v.end(), 2); 

int i = low - v.begin(); 

をしかし、私はintの代わりにイテレータに結果を代入しようとしたとき、私はコンパイルエラーました:

std::vector<int>::iterator i = low - v.begin(); 

イテレータを別のイテレータから減算するのはなぜですか?

cplusplus.com/referenceなど、イテレータのインターフェイスに正確に何か情報が含まれています。

+5

他の2つのイテレータの違いはイテレータのセマンティクスとは何でしょうか? – user888379

+0

コンパイルエラーを通知する必要があります。また、2つのイテレータを減算するとイテレータが返された場合、単純なポインタ(イテレータと見なされます)がお互いに減算されると、あなたのロジックでポインタが生成されます。しかし、そうではありません。 – PaulMcKenzie

+1

距離関数があります戻り値要素数が2イテレータの間です –

答えて

4

「イテレータを別のイテレータから減算するのはなぜですか?」

2つのポインタを減算しても、別のポインタが返されないのはなぜですか。

私はそれが含まれている要素の単位で2つのイテレータの間の距離を返すことを期待するものであれば - int型

をIEと簡単なテストはそれが

vector<int> test; 
test.push_back(1); 
    test.push_back(2); 
int d = test.begin() - test.end(); 
cout << d; 
return 0; 

が言う距離を返すないことを示します:-2

+0

イテレータを他のイテレータ/ポインタではなく、距離を減算すると距離を返すことは意味を成しています。ありがとう! –

関連する問題