3
std::list<Value> stdList;

stdList.push_back(Value());

Value * ptr = &stdList.back(); // <-- what will this address point to?

によって返された参照を取得しback()、暗黙のうちに一般的ではない に変換するとValue *、リストの最後の値を指しますか、それとも予期しない場所を指しますか?

std::list などの関数で使用するために、ポインターからイテレーターを作成する方法はありますerase()か? ジェネリックからスペシフィック (イテレーターからポインター) は、他の方向に進むよりもはるかに実行可能であることに気付きましたが、とにかく聞いてみようと思いました。

4

2 に答える 2

2

ポインタは、コンテナ内に格納されている値を指します。参照は同じことをしました。

周囲の構造に関するすべての情報が失われているため、そのポインタをリストイテレータに直接変換することはできません。これを行うには、を賢くする必要がありますlist::find

あなたがやろうとしていることは時々を使って行われvectorます。vectorデータ要素ポインタをイテレータ(配列インデックス)に変換できる理由は、の構造を知っているためですvector

イテレータは返されlist::back()ませんのでご注意ください。参照を返します。2つはかなり異なります。あなたは考えていlist::end()ますか?それとも、イテレータと参照の間で本当に混乱していますか?ポインタから参照を取得できるからです。あなたはこのようにします:

Value& refval = *ptr;
于 2013-03-18T02:07:35.453 に答える
1

はい、ポインターはリストに格納されている最後の値を指します。

ポインターからイテレーターを作成することはできません。イテレーターはコンテナー (リストはこちら) の概念であり、イテレーターはリストに格納されている値の種類を気にしません。参照とポインターは、リストに格納された値のハンドルであり、交換可能であり、参照をポインターに、またはその逆に変換できます。

于 2013-03-18T09:26:54.870 に答える