63

構造のベクトルvecがあります。このような構造には要素がありますint a, int b, int cint varベクトルの最後の構造から要素 cを割り当てたいと思います。この簡単な解決策を教えてください。私はこのように一列に並んで行きます:

var = vec.end().c;
4

8 に答える 8

110

ベクター内の最後の要素へのアクセスをフェッチすることに関するあなたの質問に対する即時の答えは、back()メンバーを使用して達成できます。そのような:

int var = vec.back().c;

注: ベクトルが空の可能性がある場合、そのような呼び出しback()は未定義の動作を引き起こします。このような場合、メンバーを使用して、使用する前にベクターの空の状態を確認できます。back()empty()

if (!vec.empty())
   var = vec.back().c;

これら 2 つの方法のいずれかが、ニーズに適している可能性があります。

于 2013-01-11T09:45:35.203 に答える
14

vec.end()ベクター内の末尾位置を参照する反復子です。そのため、これを参照してメンバー値にアクセスすることはできません。vec.end()空のベクトルであっても、反復子は常に有効です (その場合vec.end() == vec.begin())

ベクトルの最後の要素にアクセスしたい場合vec.back()は、参照を返します (イテレータではありません)。ただし、ベクトルが空の場合、未定義の動作が発生することに注意してください。ほとんどの場合、クラッシュします。

于 2013-01-11T09:44:46.090 に答える
6

使用back():

var = vec.back().c;
于 2013-01-11T09:40:39.000 に答える
3

これを試して:var = vec.back().c;

また、次のようにコードを変更することもできます。

var = vec.rbegin()->c;

どちらのバージョンでも、最初にベクターが空でないことを確認してください!

于 2013-01-11T09:41:25.940 に答える
2

var = vec.back().c;あなたが望むものです。

end()ベクトルの終わりを過ぎた反復子 (要素ではない) を返します。back()最後の要素への参照を返します。それに対応するfront()ものもあります。

于 2013-01-11T09:40:56.183 に答える
1

back最後の要素への参照を返すため、単純に使用できます。
var = vec.back().c

于 2013-01-11T09:41:47.163 に答える
0

std:vector<T>:back()関数を使用できますvec.back().chttp://www.cplusplus.com/reference/vector/vector/back/を参照してください。

于 2013-01-11T09:42:45.817 に答える