2011-05-11 18 views
45

के अंत में जोड़ने के लिए सी ++ वेक्टर :: डालने() का उपयोग करके मैं कोड का एक छोटा टुकड़ा लिख ​​रहा हूं जहां मुझे वेक्टर तत्वों में मूल्यों के आधार पर एक निश्चित स्थान पर एक सी ++ एसटीएल वेक्टर में मूल्य डालना होगा । मैं इसे पूरा करने के लिए insert() फ़ंक्शन का उपयोग कर रहा हूं। मुझे एहसास है कि जब मैं वेक्टर के अंत में एक नया तत्व जोड़ना चाहता हूं, तो मैं बस push_back() का उपयोग कर सकता हूं। लेकिन मेरा कोड अच्छा दिखने के लिए, मैं विशेष रूप से insert() का उपयोग करना चाहता हूं, जो इच्छित प्रविष्टि बिंदु और मूल्य डालने के बाद तत्व को इंगित करने वाले इटरेटर को इनपुट के रूप में लेता है। यदि पुनरावर्तक के मान को तर्क के रूप में पास किया गया है तो v.end() है, जहां v मेरा वेक्टर है, क्या यह push_back() जैसा ही काम करेगा?वेक्टर

बहुत बहुत धन्यवाद!

+3

यदि आप स्वयं को वेक्टर में बहुत कुछ डालने का उपयोग करते हैं, तो आप गलत डेटा संरचना का उपयोग कर रहे हैं। एक डेक का उपयोग कर (उदाहरण के लिए) पर विचार करें। बेशक अगर वेक्टर छोटा है, तो कोई समस्या नहीं होगी। –

+13

@ निक: हाँ यह होगा। एक साधारण प्रयोग आपको बता सकता था। –

+12

@ स्पेस मैं नहीं देखता कि एक प्रयोग ने उसे कैसे बताया होगा। यदि यह अमान्य था, तो उसे यूबी मिल जाएगी, जिस स्थिति में उसका कार्यक्रम शायद काम पर दिखाई दे। –

उत्तर

77

a.push_back(x)परिभाषित अनुक्रम कंटेनर है कि यह समर्थन के लिए (void)a.insert(a.end(),x) के समान अर्थ विज्ञान है।

आईएसओ/आईईसी 14882: 2003 23.1.1/12 [lib.sequence.reqmts] में तालिका 68 देखें।

+1

प्रदर्शन के संदर्भ में त्वरित प्रश्न, मुझे आश्चर्य है कि क्या pusk_back तेजी से काम करता है? मैंने कुछ दिखाया परीक्षण डालने की तरह धीमा है। मैं बस सुनिश्चित करना चाहता था ... धन्यवाद – Saman

+1

push_back() नए डाले गए तत्व के पुनरावर्तक को वापस नहीं देता है। std :: सूची :: अंत() एक मृत पुनरावर्तक वापस देगी। – peterh

14

वहाँ एक मामूली अंतर यह है कि push_back रिटर्न voidinsert कि क्या रिटर्न iterator तत्व करने के लिए सिर्फ डाला है।

वैसे, वहाँ एक और तरीका है सत्यापित करने के लिए कि क्या वे एक ही बात करते हैं: निम्नलिखित कोड

int main() 
{ 
    std::vector<int const> v; 
    v.push_back(0); 
    return 0; 
} 

संकलक परेशान करने वाले संदेशों का एक बहुत प्रिंट होगा संकलन, बस पढ़ सकते हैं और आप push_back कॉल मिलेगा insert (यदि नहीं, तो v.insert(v.end(), 0) को संकलित करने का प्रयास करें ताकि यह देखने के लिए कि वे एक ही डालने वाले फ़ंक्शन को कॉल करते हैं)।