我不知道是否有這個漂亮的語法讓一個正常的指針(不迭代器)到最後一個元素在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 ] ;
但這些都沒有非常好看!
我不知道是否有這個漂亮的語法讓一個正常的指針(不迭代器)到最後一個元素在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 ] ;
但這些都沒有非常好看!
int* ptrToLastOne = &vec.back(); // precondition: !vec.empty()
沒有爲更漂亮,但你可以寫一個模板輔助函數將在內部做同樣的話,而這樣一來,至少在調用的地方會顯得乾淨多了,你會得到通過種植錯誤的概率較低錯別字。
請參閱accepted answer以得到一個非常類似的問題以及解決方案的外觀。
int* ptrToLast = &(vec.back()); // Assuming the vector is not empty.
有些選項:
int* ptrToLast = &*vec.rbegin();
或
int* ptrToLast = &*boost::prev(vec.end());
http://stackoverflow.com/questions/14275291的重複 – kebs 2015-06-10 13:54:57