2016-10-21 72 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使用指向向量类型的指针 – Hennio

相关问题