2010-09-06 15 views
10

Mi chiedo se non v'è la sintassi più bella per questo per ottenere un puntatore normale (non un iteratore) per l'ultimo elemento in C++ vettoreSintassi più carina per "puntatore all'ultimo 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 ] ; 

Ma questi sono entrambi non molto bello bello!

+0

duplicati di http://stackoverflow.com/questions/14275291 – kebs

risposta

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

Niente di più bello per questo, ma puoi scrivere una funzione di supporto basata su modelli che farà lo stesso per te internamente, e in questo modo almeno i siti di chiamata appariranno molto più puliti e avrai meno probabilità di errori di impianto attraverso errori di battitura.

Vedere lo accepted answer in una domanda molto simile e quale potrebbe essere la soluzione.

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

Alcune più opzioni:

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

o

int* ptrToLast = &*boost::prev(vec.end()); 
Problemi correlati