2011-06-24 36 views
7

Tôi mới dùng C++ nên đây có lẽ là một câu hỏi rất đơn giản, nhưng tôi không thể tìm thấy bất kỳ ví dụ trực tuyến nào đã giúp.Danh sách C++/giúp đỡ vector

tôi đã xác định lớp Bubble của riêng tôi và tôi cần phải tạo ra một vector/list (Tôi đã quen với C# và Java, vì vậy tôi không chắc chắn đó là chính xác) để tự động lưu trữ các đối tượng trong Bubble. Đây là của tôi mã cho đến nay:

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

Cả list lẫn vector công trình - nó nói "danh sách/vector không phải là một mẫu" trong danh sách lỗi của tôi.

Tôi nên sử dụng số nào, list hoặc vector? Và làm thế nào để tôi thực hiện chính xác nó?

Trả lời

7

Các hàm vector.add() và list.add() không tồn tại.

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

Có hầu như không có sự khác biệt rõ ràng giữa véc tơ và danh sách, nhưng chức năng, có.

So với các cơ sở khác container dãy tiêu chuẩn (deques và danh sách), vectơ nói chung là các hiệu quả nhất trong thời gian cho việc truy cập yếu tố và để thêm hoặc loại bỏ các yếu tố từ ngày kết thúc của chuỗi. Đối với các hoạt động có liên quan đến việc chèn hoặc xóa các phần tử tại các vị trí khác hơn kết thúc, chúng hoạt động kém hơn deques và danh sách và có ít hơn biến lặp và tham chiếu nhất quán so với danh sách.

So với cơ sở tiêu chuẩn container chuỗi khác (vectơ và deques), danh sách thực hiện thường tốt hơn trong chèn, giải nén và di chuyển các yếu tố ở vị trí nào trong container, và do đó cũng trong thuật toán mà làm cho sử dụng chuyên sâu trong số , như các thuật toán sắp xếp.

+2

"hầu như không có sự khác biệt rõ ràng"? Làm thế nào về truy cập ngẫu nhiên với []/:: tại? Đó là sự khác biệt rõ ràng nhất giữa hai người, và nó không phải là thứ mà bạn thực sự có thể bỏ qua khi chọn cái này hay cái kia. –

5

Chúng nằm trong không gian tên std. Như tất cả các phần của thư viện chuẩn C++. Vì vậy, chúng được gọi chính xác là std::liststd::vector.

Chúng cũng không có chức năng thành viên được gọi là add. Bạn có thể muốn tìm kiếm C++ reference.

1

Hãy thử

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

Lists và vectơ được định nghĩa trong namespace std.

2

listvector nằm trong không gian tên std và bạn phải tìm chúng ở đó.

std::vector<Bubble> bubbles;

Trong cả hai trường hợp, bạn sử dụng .push_back để phụ thêm vào container.Khi nghi ngờ, bạn thường nên thích vector.

4

Vector và danh sách là một phần của không gian tên std. Vì vậy, bạn nên khai báo vectơ và danh sách của mình như sau:

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

Ngoài ra, chức năng thành viên để thêm phần tử là push_back.

2

Bạn đang thiếu không gian tên tại đây. Cả danh sách và vectơ là một phần của không gian tên chuẩn có nghĩa là bạn có thể bao gồm không gian tên trên cơ sở toàn cầu bằng cách viết using namespace std; một lần vào đầu tệp hoặc viết std::liststd::vector mọi nơi bạn đang sử dụng các biến.

Các vấn đề liên quan