構造のベクトルvecがあります。このような構造には要素がありますint a, int b, int c
。int var
ベクトルの最後の構造から要素 cを割り当てたいと思います。この簡単な解決策を教えてください。私はこのように一列に並んで行きます:
var = vec.end().c;
ベクター内の最後の要素へのアクセスをフェッチすることに関するあなたの質問に対する即時の答えは、back()
メンバーを使用して達成できます。そのような:
int var = vec.back().c;
注: ベクトルが空の可能性がある場合、そのような呼び出しback()
は未定義の動作を引き起こします。このような場合、メンバーを使用して、使用する前にベクターの空の状態を確認できます。back()
empty()
if (!vec.empty())
var = vec.back().c;
これら 2 つの方法のいずれかが、ニーズに適している可能性があります。
vec.end()
ベクター内の末尾位置を参照する反復子です。そのため、これを参照してメンバー値にアクセスすることはできません。vec.end()
空のベクトルであっても、反復子は常に有効です (その場合vec.end() == vec.begin()
)
ベクトルの最後の要素にアクセスしたい場合vec.back()
は、参照を返します (イテレータではありません)。ただし、ベクトルが空の場合、未定義の動作が発生することに注意してください。ほとんどの場合、クラッシュします。
使用back()
:
var = vec.back().c;
これを試して:var = vec.back().c;
また、次のようにコードを変更することもできます。
var = vec.rbegin()->c;
どちらのバージョンでも、最初にベクターが空でないことを確認してください!
var = vec.back().c;
あなたが望むものです。
end()
ベクトルの終わりを過ぎた反復子 (要素ではない) を返します。back()
最後の要素への参照を返します。それに対応するfront()
ものもあります。
back
最後の要素への参照を返すため、単純に使用できます。
var = vec.back().c
std:vector<T>:back()
関数を使用できますvec.back().c
。http://www.cplusplus.com/reference/vector/vector/back/を参照してください。