web-dev-qa-db-ja.com

c ++ベクトルの最後の要素フィールド

構造のベクトルvecがあります。このような構造には、要素int a、int b、int cがあります。ベクトルの最後の構造からint var要素cに割り当てたいと思います。この簡単なソリューションを提供していただけますか?私はこのように並んでいます:

var = vec.end().c;
39
berndh

ベクトルの最後の要素へのアクセスを取得するという質問に対する即時の回答は、back()メンバーを使用して実現できます。といった:

_int var = vec.back().c;
_

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

_if (!vec.empty())
   var = vec.back().c;
_

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

79
WhozCraig

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

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

9
CygnusX1

back() を使用します。

var = vec.back().c;
4
Veger

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

end()は、ベクトルの末尾のイテレータ(要素ではない)を返します。 back()は、最後の要素への参照を返します。対応するfront()もあります。

2
Chowlett

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

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

var = vec.rbegin()->c;

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

2

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

1
mkaes

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

0
Lars