2017-07-04 3 views
-3

私の質問のタイトルがあまりにも曖昧だと申し訳なく思っていますが、私が把握しようとしていることを簡単に説明する方法はわかりません。基本的に私はstd :: vector型のプロパティを持つクラスを持っています。これはそれ自身へのポインタを含むはずです。私は、提供されたコードの両方をビルドして実行しようとしましたが、エラーはありませんでした。そこで、これらのコードの違いは何ですか? コード1:これらのクラスステートメントの違いは何ですか?

class MyClass { 
public: 
    std::vector<MyClass *> Container; 
}; 

コード2:

class MyClass { 
public: 
    std::vector<MyClass> * Container; 
}; 

私は任意の助けをいただければ幸いです。 ありがとう

+3

まず点のベクトルでありますMyClassに変換します。 2番目は 'MyClass'のインスタンスのベクトルへのポインタです。 – iehrlich

+2

'std :: vector Container;これは' MyClass'要素へのポインタのリストを含むベ... 'std :: vector * Container;'これは 'MyClass'を含むベクトルへのポインタです要素。 – ZeldaZach

+0

@mike baykoオブジェクトにベクターに何個のポインタを持たせることができますか?たぶん、std :: vector型の静的データメンバーを意味するのでしょうか? –

答えて

0

最初のケースでは、MyClassポインタの配列を定義しています。

ケース1:この場合

class MyClass { 
public: 
    std::vector<MyClass *> Container; 
}; 

、はsizeof(コンテナ)は、ベクトルのはsizeof(MyClassの*)(ポインタのサイズ)X長さであろう。ベクトルそのものと同じです。 あなたは...このように第2のケースで

// ChildContainer is a vector 
ChildContainer = myInstance->Container[i]->Container; 

を変数にアクセスし、あなたは(自分自身も、とにかく、すでにポインタである)クラスインスタンスの配列へのポインタを定義しています。ここで、sizeof(Container)はポインタのサイズになります。ベクトルそのものは、sizeof(MyClass)(インスタンスポインタ!)のベクトル長Xになります。

ケース2:

class MyClass { 
public: 
    std::vector<MyClass> * Container; 
}; 

あなたはこのような変数にアクセスします...

// ChildContainer is a pointer to a vector 
ChildContainer = myInstance->(*Container)[i]->Container; 

MyClassのは、実際にあった場合は、構造体がによってポインタではありませんので、構造体、アクセスは少し異なる可能性がありますデフォルト。

ケース1:

struct MyClass { 
public: 
    std::vector<MyClass*> Container; 
}; 

使用:

// ChildContainer is a vector 
ChildContainer = myInstance.Container[i]->Container; 

ケース2:

struct MyClass { 
public: 
    std::vector<MyClass> * Container; 
}; 

使用:

// ChildContainer is a pointer to a vector 
ChildContainer = myInstance.(*Container)[i].Container; 
+0

これを明確にしていただきありがとうございます。 –

+0

サイズはすべて間違っています、 – juanchopanza

+0

@元コパンザ説明。ちょうど間違っていると言ってもそれほど役に立ちません。 –

関連する問題