2011-06-24 35 views
7

C++ 'da yeni oluyorum, bu yüzden bu muhtemelen çok basit bir soru, ancak yardımcı olan çevrimiçi örnekleri bulamadım.C++ liste/vektör yardım

ben kendi Bubble sınıf tanımladığınız ve ben bir vector/list (C# ve Java alışkınım, bu yüzden doğru olduğundan emin değilim) dinamik olarak Bubble nesneleri depolamak için. İşte oluşturmak için gereken benim Bugüne kadar kod:

#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); 
} 

ne list ne de vector çalışır - bu benim hata listesinde "liste/vektör şablon değil" diyor.

list veya vector mu kullanmalıyım? Ve bunu doğru bir şekilde nasıl uygularım?

cevap

7

vector.add() ve list.add() işlevleri mevcut değildir.

#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); 
} 

Vektör ile liste arasında hemen hemen hiçbir belirgin farklılık yoktur, ancak işlevsel olarak vardır. Diğer baz standart sekans konteynerler (deques ve listeleri) ile karşılaştırıldığında

, vektörler elemanlarına ulaşmak için, genel olarak zaman içinde en verimli ve eklemek veya dizinin sonunda öğeleri kaldırın. Sonunda daha başka pozisyonlarda unsurları kaldırarak yerleştirirken veya dahil işlemleri için, onlar daha kötü deques ve listeleri gerçekleştirmek ve daha az tutarlı yineleyicinızı ve listeler daha referanslar var. diğer baz standart dizi konteyner (vektörler ve deques) ile karşılaştırıldığında

, listeler içinde herhangi bir pozisyonda muhafaza elemanları, hareketli sokulması ayıklanması ve genel olarak daha iyi performans ve bu nedenle de algoritmaları yoğun kullanım yapmak Bu, sıralama algoritmaları gibi, .

+2

"hemen hemen hiç belirgin farklılıklar"? []/:: ile rastgele erişime ne dersiniz? İkisi arasındaki en belirgin ayrım bu, ve birini seçerken gerçekten göz ardı edebilecek bir şey değil. –

5

std ad alanındalar. C++ standart kütüphanesinin tüm parçaları gibi. Bu nedenle doğru olarak std::list ve std::vector olarak adlandırılır.

Ayrıca, add adı verilen üye işlevleri yoktur. C++ reference'u aramak isteyebilirsiniz.

1

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

Listelerini deneyin ve vektörler std ad alanında tanımlanır.

2

list ve vectorstd ad vardır ve buna göre orada onlara bakmak gerekir. Her iki durumda da

std::vector<Bubble> bubbles;

, sen kaba eklemek için .push_back kullanın.Şüphe duyduğunuzda, genellikle vector'u tercih etmelisiniz.

4

Vektör ve liste, std ad alanının bir parçasıdır. Yani bu gibi vektör ve listenizi beyan etmelidir:

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

Ayrıca, üye işlevi bir unsur push_back olduğunu ekleyin.

2

İsim alanını burada kaçırıyorsunuz. Hem liste hem de vektör, dosya adının başına using namespace std; bir kez yazarak veya değişkenleri kullandığınız her yere std::list ve std::vector yazarak, ad alanı genel bir temelde ekleyebileceğiniz anlamına gelen standart ad alanının bir parçasıdır.