2010-09-06 9 views
10

Me pregunto si hay más bonita sintaxis para esto para obtener un puntero normal (no un iterador) hasta el último elemento en un vector de C++Sintaxis más bonita para "puntero al último elemento", std :: vector?

std::vector<int> vec; 

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

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

Pero estos dos no son un aspecto muy agradable!

+0

duplicado de http://stackoverflow.com/questions/14275291 – kebs

Respuesta

31
int* ptrToLastOne = &vec.back(); // precondition: !vec.empty() 
3

Nada más bonito para eso, pero puede escribir una función de ayuda temporal que hará lo mismo internamente, y de esta manera al menos los sitios de llamadas se verán mucho más limpios y tendrá menos probabilidad de sembrar errores errores tipográficos

Consulte el accepted answer a una pregunta muy similar y cómo se vería la solución.

6
int* ptrToLast = &(vec.back()); // Assuming the vector is not empty. 
4

Algunos más opciones:

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

o

int* ptrToLast = &*boost::prev(vec.end()); 
Cuestiones relacionadas