2013-04-26 6 views
7
std::vector<std::vector< std::pair<int, int> > > offset_table; 
    for (int i = 0; i < (offset.Width()*offset.Width()); ++i) 
    { 
    offset_table.push_back( std::vector< std::pair<int, int> > ); 
    } 

यह मेरा कोड है, लेकिन मैं त्रुटियों हो रही है:कैसे एक जोड़े के खाली वेक्टर को दूसरे वेक्टर में वापस धक्का देगा?

main.cpp: In function ‘void Compress(const Image<Color>&, Image<bool>&, Image<Color>&, Image<Offset>&)’: 
main.cpp:48:66: error: expected primary-expression before ‘)’ token 

मैं नहीं चाहता कि जोड़ों में कोई भी मान, मैं सिर्फ इस समय खाली वैक्टर का एक वेक्टर करना चाहते हैं। यह मैं कैसे करूंगा?

उत्तर

9

आप और push_back को पारित करने के लिए एक सदिश का निर्माण करना चाहते हैं तो आप सिर्फ कोष्ठकों छूट रहा है:

offset_table.push_back( std::vector< std::pair<int, int> >() ); 

या, अपने पाश के बजाय, आप बस निम्नलिखित कर सकता है। यह बेहतर है क्योंकि वेक्टर एक भी आवंटन में स्मृति के सिर्फ सही राशि आवंटित करेगा: 2 तर्क

offset_table.resize(offset.Width()*offset.Width(), std::vector< std::pair<int, int> >()); 

या यह है, जो अधिक संक्षिप्त है, क्योंकि यह उपयोग कर रहा है का आकार बदलने के लिए डिफ़ॉल्ट:

offset_table.resize(offset.Width()*offset.Width()); 
0
std::vector<std::vector< std::pair<int, int> > > offset_table; 

यह एक 2 डी सरणी है इसलिए आपको नेस्टेड सरणी का उपयोग करने की आवश्यकता है। आंतरिक वेक्टर अगर लंबाई केवल प्राप्त करने के लिए।

for(vector< pair<int, int >> vv in offset_table) 
{ 
    if(vv.size() == 0) 
    { 
     // this is your target. 
    } 
} 
+0

मुझे लगता है कि आपने इस सवाल को गलत समझा है। मुझे लगता है कि सवाल यह था कि आप वैक्टर के वेक्टर में एक खाली वेक्टर को कैसे दबाते हैं। – Owl

संबंधित मुद्दे