2016-10-21 5 views
-4

私は動的に作成するいくつかのオブジェクトを持っています。これらのオブジェクトはグローバルに定義されています。動的オブジェクトへのポインタを含む他のベクトルを含むベクトル

Object *obj1 = new Object; 
    Object *obj2 = new Object; 
    Object *obj3 = new Object; 

これらのオブジェクトをすべて格納するベクターもあります。

std::vector<Object*> cntr; 
    cntr.push_back(obj1); 
    cntr.push_back(obj2); 
    cntr.push_back(obj3); 

私は上記のようないくつかの他のベクトルを作成し、これらに類似のオブジェクトを設定します。私は、これらのオブジェクトのいずれかのメンバ関数のいずれかにアクセスしたい場合は

std::vector<Object*> cntr2; 
    std::vector<Object*> cntr3; 

私は単にこれを書くことができます。しかし

cntr[i]->memberFunction(); 
    cntr2[i]->memberFunction(); 

を、後で私のコードで私は、同様のベクトルを格納するためのベクトルを作成しますObject型*

std::vector< std::vector<Object*> > GroupCntr; 
    GroupCntr.push_back(cntr); 
    GroupCntr.push_back(cntr2); 

私は今に直面しています問題はGroupCntrに格納されているベクトルに格納されているオブジェクトのメンバ関数にアクセスする方法ですか?私はすべての組み合わせを試しました

* -> () [] (*) 

成功しません。私はまた、この種のコードでは、生ポインタの使用に大きく依存しており、所有権の主題を疑問に思うので、私が批判されるかもしれないことを認識しています。しかし、私は本当にこの運動がどのように達成できるか知りたいですか?

+0

'GroupCntr [OUTER_INDEX] [INNER_INDEX] - > object_member;' – Zereges

+3

あなたが必要とするすべてのベクトルの要素にアクセスする方法を知ることです。それでおしまい。それについてちょっと考えてみてください。 – juanchopanza

答えて

2

あなたが要素を取得したい場合は、'[][]' を最初[]を使用する必要が 二[]が要素にアクセスすることです、ベクトルにアクセスすることです。

次の要素へのアクセスを取得するためには、使用を必要とする ' - >' 演算子ここ

は一例です。

#include <iostream> 
#include <vector> 

struct sample { 
int p; 
}; 


int main() { 

    std::vector<sample*> vec_sample; 
    std::vector<sample*> vec_sample1; 

    sample* sample1 = new sample(); 
    sample1->p=6; 
    sample* sample2 = new sample(); 
    sample2->p=2; 
    vec_sample.push_back(sample1); 
    vec_sample.push_back(sample2); 
    std::vector<std::vector<sample*> > many; 
    many.push_back(vec_sample); 
    many.push_back(vec_sample1); 
    std::cout<<many[0][0]->p<<std::endl; 

} 
+0

OPがベクトル型のポインタを使用するため、intを使用する代わりに[[] [] - >組み合わせが答えでどのように機能するかを示す必要があります – Hennio

関連する問題