2010-09-06 150 views
10

我不知道是否有這個漂亮的語法讓一個正常的指針(不迭代器)到最後一個元素在C++矢量「指向最後一個元素的指針」更漂亮,std :: vector?

std::vector<int> vec; 

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

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

但這些都沒有非常好看!

+0

http://stackoverflow.com/questions/14275291的重複 – kebs 2015-06-10 13:54:57

回答

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

沒有爲更漂亮,但你可以寫一個模板輔助函數將在內部做同樣的話,而這樣一來,至少在調用的地方會顯得乾淨多了,你會得到通過種植錯誤的概率較低錯別字。

請參閱accepted answer以得到一個非常類似的問題以及解決方案的外觀。

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

有些選項:

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

int* ptrToLast = &*boost::prev(vec.end()); 
相關問題