2011-06-24 3 views
7

私はC++を使い慣れていないので、これはおそらく非常に簡単な質問ですが、私は助けてくれたオンラインの例を見つけることができませんでした。C++リスト/ベクタヘルプ

私は自分Bubbleクラスを定義したと私は動的にBubbleオブジェクトを格納するために(私はC#とJavaのに慣れているので、私は正しいことかわからないんだけど)vector/listを作成する必要があります。ここに私ですこれまでコード:

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

どちらlistvector作品 - それは私のエラーリストの「リスト/ベクトルは、テンプレートではありません」と言います。

どちらを使用しますか?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); 
} 

ベクターとリストの間には明らかな違いはほとんどありませんが、機能的にはあります。他の塩基標準 配列コンテナ(dequeのと リスト)と比較

、ベクターは、一般 要素にアクセスするための時間で効率的最も であり、シーケンスの終わりから要素を 追加または削除します。 を挿入するか、または の位置で要素を他の位置から削除する操作は、 dequesとリストより悪く実行され、 の一貫性のあるイテレータと参照がリストより少なくなります。

他の塩基標準 配列コンテナ(ベクターおよび dequeの)と比較すると、リストは集中的な使用を行う アルゴリズムにも従って 内の容器を任意の位置に要素を移動、挿入抽出し に一般 良好に行い、そして これらはソートアルゴリズムと同様です。

+2

「ほとんど明らかな違いはありませんか? []/:: atでのランダムアクセスはどうですか?これは、2つの間の最も明白な区別です。それは、どちらか一方を選ぶときにあなたが本当に無視できるものではありません。 –

5

これらは、std名前空間にあります。 C++標準ライブラリのすべての部分がそうであるように。したがって、それらは正しくstd::liststd::vectorと呼ばれます。

また、addというメンバ関数もありません。 C++ referenceを検索することができます。

1

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

リストを試してみて、ベクトルはstd名前空間で定義されています。

2

listvectorstd名前空間にあり、そして、あなたはそれに応じてそこに彼らのために見なければなりません。いずれの場合も

std::vector<Bubble> bubbles;

、あなたはコンテナに追加する.push_backを使用しています。不確かな場合は、一般的にはvectorを選ぶべきです。

4

ベクトルとリストはstd名前空間の一部です。だから、このようなあなたのベクトルとあなたのリストを宣言する必要があります。

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

また、メンバ関数は、要素が一backで追加します。

2

ここに名前空間がありません。リストとベクトルの両方が標準名前空間の一部です。これは、ファイルの先頭に一度using namespace std;を書くか、変数を使用する場所にstd::liststd::vectorと書くことで、名前空間をグローバルに含めることができるということを意味します。