我有很多动态创建的对象。这些对象是全局定义的。
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 :(得分:2)
如果您想获取元素,则需要使用'[][]'
第一个[]
是访问向量,
第二个[]
是访问元素。
接下来要访问元素,您需要使用' - &gt;'操作
以下是一个例子:
#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;
}