2010-09-06 13 views
10

अगर वहाँ एक सी में पिछले तत्व के लिए एक सामान्य सूचक (नहीं पुनरावर्तक) प्राप्त करने के लिए इस बात के लिए खूबसूरत वाक्य रचना ++ वेक्टर"अंतिम तत्व के सूचक" के लिए सुंदर वाक्यविन्यास, std :: वेक्टर?

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

उत्तर

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()); 
संबंधित मुद्दे