には、0
〜99
の100個の値が含まれています。 the following考える:C++ dequeイテレータのスマートはどのくらいですか
: によって両端キュー内の要素にアクセスするには、別の要素へのポインタを相殺するには、未定義の動作が発生します。
以下の行が有効ではありません表示されます。
int invalidResult = *(d.begin() + 81); // might give me 81, but NOT GUARANTEED, right?
私の質問はこれです:イテレータがこのの世話をするのでしょうか? 1点で
std::deque<int>::iterator it = d.begin();
int isThisValid = *(it + 81); // 81 every time? or does it result in undefined behavior?
、私はイテレータは基礎となるストレージのいずれかの不連続を扱うだろうと思っていたが、今私はよく分かりません。明らかに、あなたがit++
を81回使用した場合、*it
はあなたに81
を与えるでしょう。
誰かが確実に言うことができますか?
私はC++ 11を使用していません。
"**ポインタ**をオフセットする"の部分は、 'd.begin()+ 81'と何が関係していますか? –
dequeイテレータがランダムアクセスであるかどうか尋ねていますか?はい。そうです。 –
@KerrekSBだから、彼らは「要素のアドレスを取ってそこから相殺しない」と言おうとしているのですか? – kmort