イテレータをポインタに変換しますか? 質問する

イテレータをポインタに変換しますか? 質問する

std::vector要素を持つ がありますn。ここで、最後の要素を持つベクトルへのポインタを関数n-1に渡す必要があります。

たとえば、 には がvector<int> foo含まれています(5,2,6,87,251)。 関数は を受け取りvector<int>*、 へのポインターを渡したいと考えています(2,6,87,251)

イテレータを(安全に)取得し++foo.begin()、それをポインタに変換して関数に渡すことはできますか? または を使用しますか&foo[1]

アップデート:関数を変更して、ポインタではなくイテレータを取るように勧められることがあります。私が言及した関数は の関数なので、私の状況ではそれは不可能のようですfind。では、その場合、 の要素を新しいベクトルにunordered_set<std::vector*>コピーし、そのポインタで を呼び出すことが唯一の選択肢でしょうか。非常に非効率的です。特に、最後の、次になどの要素を照会して にあるかどうかを確認するなど、多くのサブセットを照会する必要があるため、画家のシュレミールのようです。n-1foofindn-1n-2unordered_set

ベストアンサー1

ここでは、イテレータの対応するポインタへの参照を取得するために使用します。

例:

string my_str= "hello world";

string::iterator it(my_str.begin());

char* pointer_inside_buffer=&(*it); //<--

[注意演算子*は参照したがって、参照に対して & を実行すると、アドレスがわかります。

おすすめ記事