Красивый синтаксис для "указателя на последний элемент", std :: vector? - PullRequest
13 голосов
/ 06 сентября 2010

Мне интересно, есть ли более симпатичный синтаксис для получения нормального указателя (не итератора) на последний элемент в векторе C ++

std::vector<int> vec;

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

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

Но оба они выглядят не очень красиво!

Ответы [ 4 ]

35 голосов
/ 06 сентября 2010
int* ptrToLastOne = &vec.back(); // precondition: !vec.empty()
6 голосов
/ 06 сентября 2010
int* ptrToLast = &(vec.back()); // Assuming the vector is not empty.
4 голосов
/ 06 сентября 2010

Еще несколько опций:

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

или

int* ptrToLast = &*boost::prev(vec.end());
3 голосов
/ 06 сентября 2010

Ничего более приятного для этого, но вы можете написать шаблонную вспомогательную функцию, которая будет делать то же самое для вас внутренне, и таким образом, по крайней мере, сайты вызовов будут выглядеть намного чище, и вы получите меньшую вероятность появления ошибок при опечатках .

См. принятый ответ на очень похожий вопрос и как может выглядеть решение.

...