2012-12-14 16 views
9

में डाली गई वस्तु का सूचकांक प्राप्त करें मैं उस स्थिति को कैसे प्राप्त कर सकता हूं जहां मेरी वस्तु वास्तव में डाली गई थी?वेक्टर

#include <vector> 
using namespace std; 

vector<SomeClass> list; 
SomeClass object; 
list.push_back(object); 

list[...].method(); // I do not have the key 

दुर्भाग्य push_back कुछ भी वापस नहीं करता है के बाद से अपनी वापसी प्रकार void है।

+5

एक असंबंधित संकेत के रूप में, किसी भी चर के नाम के रूप में 'सूची' का उपयोग कभी न करें, खासकर 'वेक्टर' प्रकार के चर के लिए नहीं। मानक सूची में 'सूची' भी एक कंटेनर है। एक वेक्टर नाम सूची होने के बाद किसी को भी इस कोड को पढ़ने के लिए दुःख का निरंतर स्रोत होने जा रहा है। –

+1

मैंने आपकी कक्षा का नाम 'वर्ग' (जो अमान्य सी ++) से 'कुछ क्लास' में बदल दिया है और [विचार के बारे में एक विचार] जोड़ा है (http://stackoverflow.com/a/40740375/2932052) प्रतीत होता है कि" तुच्छ व्यवहार "। – Wolf

उत्तर

14

तो v अपने वेक्टर है, निम्नलिखित आप स्थिति दे देंगे (अर्थात, सूचकांक):

v.push_back(object); 
size_t pos = v.size() - 1; 

या आप push_back() कॉल करने से पहले size() देख सकते हैं। फिर आपको एक घटाने की आवश्यकता नहीं होगी।

list.push_back(object); 
list.back(); 

push_back के बाद से() या, बस अंत करने के लिए वस्तु कहते हैं, हाल ही में डाला तत्व का सूचकांक है:

+0

डालने से पहले आकार को देखने के लिए आपके उत्तर और संकेत दोनों के लिए धन्यवाद। – danijar

6

आप एक पिछले तत्व के संदर्भ में प्राप्त करने के लिए back() सदस्य का उपयोग कर सकते वेक्टर आकार शून्य से एक:

list.push_back(object); 
vector<my_class>::size_type object_pos = list.size() - 1; 
+1

मुझे लगता है कि अंतिम डालने वाले तत्व को इंगित करने वाला एक इटरेटर देता है? उस पल में मैं इंडेक्स में एक पूर्णांक के रूप में अधिक रुचि रखता हूं जो ऑब्जेक्ट में ही है। – danijar

+0

@sharethis नहीं, पीछे() एक संदर्भ देता है। सम्मिलित तत्व की अनुक्रमणिका प्राप्त करने के लिए, नए वेक्टर आकार की गणना करें और एक घटाएं। –

+0

इसी प्रकार, '& v.back() - और v.front() 'बाद में। – MSalters

1

आप एक विशेष तत्व का पता लगाने की आप उन्हें बाद की जरूरत है, और आप आप तरह तरह वेक्टर के लिए कुछ करना (सूचकांक समय से आगे को बचाने के लिए मामले में नहीं करना चाहते हैं/जोड़ें/निकालें/आदि), आप find algorithm का भी उपयोग कर सकते हैं।

+0

ठीक है, आप जानते हैं कि आपने कितने तत्व डाले हैं ताकि आप 'ढूंढ' का उपयोग करके सूचकांक को अधिक आसान (और अधिक कुशल) पा सकें। –

+1

मैं कह रहा हूं कि तत्वों को डालने के बाद आपको कुछ कुंजी खोजने की आवश्यकता है, और आप पहले से ही इच्छित इंडेक्स को सहेज नहीं चुके हैं, यह काम कर सकता है। समस्या के आधार पर विचार करने के लिए बस एक और उपकरण। – WildCrustacean

0

जबकि NPE's correct answer एक व्यावहारिक पीओवी दिखाता है, मैं इस सरल उत्तर के लिए तर्क पर ध्यान केंद्रित करता हूं। अवलोकन योग्य व्यवहार just the purpose of the push_back member function:

दिए गए तत्व मान को कंटेनर के अंत में जोड़ता है।

तो सूचकांक हमेशा v.size() के बराबर प्रविष्टि से पहले, v.size()-1 प्रविष्टि के बाद है या, समतुल्य रूप। यदि यह दावा पूरा नहीं किया जा सकता है, तो कंटेनर की क्षमता को उगाया नहीं जा सकता है या आपकी कक्षा प्रतिलिपि/चालक कन्स्ट्रक्टर में अपवाद फेंकता है (दस्तावेज में अनुभाग Exceptions देखें)।