我不知道是否有这个漂亮的语法让一个正常的指针(不迭代器)到最后一个元素在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