17

C ++ベクトルの最後の要素への通常のポインター(イテレーターではない)を取得するためのよりきれいな構文があるかどうか疑問に思っています

std::vector<int> vec;

int* ptrToLastOne = &(*(vec.end() - 1)) ;

// the other way I could see was
int* ptrToLastOne2 = &vec[ vec.size()-1 ] ;

しかし、これらは両方ともあまり見栄えがよくありません!

4

4 に答える 4

46
int* ptrToLastOne = &vec.back(); // precondition: !vec.empty()
于 2010-09-06T13:44:54.560 に答える
8
int* ptrToLast = &(vec.back()); // Assuming the vector is not empty.
于 2010-09-06T13:45:28.410 に答える
5

その他のオプション:

int* ptrToLast = &*vec.rbegin();

また

int* ptrToLast = &*boost::prev(vec.end());
于 2010-09-06T13:48:37.383 に答える
3

これほど美しいものはありませんが、内部で同じことを行うテンプレート化されたヘルパー関数を作成できます。この方法では、少なくとも呼び出しサイトがよりきれいに見え、タイプミスによるエラーを植え付ける可能性が低くなります。

非常によく似た質問に対する受け入れられた回答と、解決策がどのように見えるかを参照してください。

于 2010-09-06T13:34:08.377 に答える