2011-03-13 20 views
24

में एक संरचना को एक वेक्टर में संरचना को पुश_बैक कैसे कर सकता हूं?push_back() एक वेक्टर

struct point { 
    int x; 
    int y; 
}; 

vector <point> a; 

a.push_back(???); 

उत्तर

33
point mypoint = {0, 1}; 
a.push_back(mypoint); 

या आप की अनुमति दी रहे हैं, point एक निर्माता देते हैं, ताकि आप उपयोग कर सकते हैं एक अस्थायी:

a.push_back(point(0,1)); 

कुछ लोगों को अगर आप एक वर्ग घोषित में एक निर्माता डाल आपत्ति होगा struct के साथ, और यह इसे गैर-पीओडी बनाता है, और शायद आप point की परिभाषा के नियंत्रण में नहीं हैं। तो यह विकल्प आपके लिए उपलब्ध नहीं हो सकता है। हालांकि, आप एक ऐसा कार्य लिख सकते हैं जो समान सुविधा प्रदान करता है:

point make_point(int x, int y) { 
    point mypoint = {x, y}; 
    return mypoint; 
} 

a.push_back(make_point(0, 1)); 
+1

make_point फ़ंक्शन कैसे काम करता है, क्या स्थानीय var mypoint वापसी के बाद दायरे से बाहर नहीं होगा? –

+0

@ विनीत डीओराज: 'मेक_पॉइंट' 'mypoint' की एक प्रति देता है। –

7
point p; 
p.x = 1; 
p.y = 2; 

a.push_back(p); 

ध्यान दें कि, a के बाद से अंक की एक वेक्टर (नहीं उन्हें संकेत), push_back अपनी बात struct की एक प्रतिलिपि बनाने जाएगा - तो p सुरक्षित रूप से एक बार इसे से बाहर चला जाता है नष्ट किया जा सकता गुंजाइश।

1
point foo; //initialize with whatever 
a.push_back(foo); 
संबंधित मुद्दे