2011-06-24 19 views
7

मैं सी ++ के लिए नया हूं इसलिए यह शायद एक बहुत ही सरल सवाल है, लेकिन मैं मददगार ऑनलाइन किसी भी उदाहरण को खोजने में सक्षम नहीं हूं।सी ++ सूची/वेक्टर सहायता

मैं अपने खुद के Bubble वर्ग परिभाषित किया है और मैं एक vector/list (मैं सी # और जावा के लिए इस्तेमाल किया है, इसलिए मुझे यकीन है कि जो सही है नहीं कर रहा हूँ) गतिशील रूप में Bubble वस्तुओं स्टोर करने के लिए। यहाँ बनाने की जरूरत मेरी कोड अब तक:

#include "Bubble.h" 
#include <vector> 
#include <list> 

int backgroundImages[10]; 
list<Bubble> bubbles; 
vector<Bubble> bubbles_two; 
Bubble b; 

void AppMain() 
{ 
    loadImages(); 
    ViewAdd(backgroundImages[8], 0,0); 
    b = Bubble(); 
    b.velocity = Vector2D(9,4); 

    //I know this can't be right.. 
    bubbles.add(b); 
    bubbles_two.add(b); 
} 

न तो list है और न ही vector काम करता है - यह बताती है कि मेरी त्रुटि सूची में "सूची/वेक्टर एक टेम्पलेट नहीं है।"

मुझे list या vector का उपयोग करना चाहिए? और मैं इसे सही तरीके से कैसे कार्यान्वित करूं?

उत्तर

7

फ़ंक्शन vector.add() और list.add() मौजूद नहीं हैं।

#include "Bubble.h" 
#include <vector> 
#include <list> 

int backgroundImages[10]; 
std::list<Bubble> bubbles(); // use the std namespace and instantiate it 
std::vector<Bubble> bubbles_two(); // same here 
Bubble b; 

void AppMain() 
{ 
    loadImages(); 
    ViewAdd(backgroundImages[8], 0,0); 
    b = Bubble(); 
    b.velocity = Vector2D(9,4); 

    //I know this can't be right.. 
    bubbles.push_back(b); // std::list also defines the method push_front 
    bubbles_two.push_back(b); 
} 

वेक्टर और सूची के बीच लगभग कोई स्पष्ट अंतर नहीं है, लेकिन कार्यात्मक रूप से, वहां हैं।

अन्य आधार मानक अनुक्रम कंटेनर (deques और सूचियों) की तुलना में, वैक्टर आम तौर पर तत्वों तक पहुँचने के लिए सबसे समय में कुशल हैं और जोड़ सकते हैं या अनुक्रम के अंत से तत्वों दूर करने के लिए। कार्य है कि डालने शामिल है या अन्य अंत से पदों पर तत्वों को दूर करने के लिए, वे भी बदतर deques और सूचियों करते हैं, और कम संगत iterators और संदर्भ सूचियों से की है।

अन्य आधार मानक अनुक्रम कंटेनर (वैक्टर और deques) की तुलना में, सूचियों आम तौर पर , डालने निकालने और भीतर किसी भी स्थिति में तत्वों चलती कंटेनर में बेहतर प्रदर्शन, और इसलिए भी एल्गोरिदम में है कि गहन इस्तेमाल करते हैं इन सॉर्टिंग एल्गोरिदम की तरह।

+2

"लगभग कोई स्पष्ट अंतर नहीं"? []/:: पर यादृच्छिक पहुंच के बारे में कैसे? यह दोनों के बीच सबसे स्पष्ट भेद है, और ऐसा कुछ नहीं है जिसे आप वास्तव में अनदेखा कर सकते हैं जब एक या दूसरे को चुनते हैं। –

5

वे std नामस्थान में हैं। सी ++ मानक पुस्तकालय के सभी हिस्सों के रूप में हैं। इसलिए उन्हें std::list और std::vector कहा जाता है।

उनके पास add नामक सदस्य फ़ंक्शन भी नहीं हैं। आप C++ reference देख सकते हैं।

1

std::list<Bubble> bubbles; 
std::vector<Bubble> bubbles_two; 

सूचियाँ की कोशिश करो और वैक्टर std नाम स्थान में परिभाषित कर रहे हैं।

2

list और vectorstd नाम स्थान में हैं, और आप उसके अनुसार वहाँ उनके लिए ध्यान देना चाहिए।

std::vector<Bubble> bubbles;

या तो मामले में, आप .push_back का उपयोग कंटेनर के लिए संलग्न करने के लिए।संदेह में, आपको आम तौर पर vector पसंद करना चाहिए।

4

वेक्टर और सूची std नेमस्पेस का हिस्सा हैं। तो अगर आप इस तरह अपने वेक्टर और अपनी सूची की घोषणा करना चाहिए:

std::list<Bubble> bubbles; 
std::vector<Bubble> bubbles_two; 

इसके अलावा, सदस्य समारोह में जोड़ने के लिए एक तत्व push_back है।

2

आप यहां नामस्थान खो रहे हैं। दोनों सूची और वेक्टर मानक नामस्थान का हिस्सा हैं जिसका मतलब है कि आप फ़ाइल की शुरुआत में using namespace std; लिखकर std::list और std::vector लिखकर प्रत्येक आधार पर नामस्थान को वैश्विक आधार पर शामिल कर सकते हैं, जहां आप चर का उपयोग कर रहे हैं।

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