包含其他向量的向量,其中包含指向动态对象的指针

时间:2016-10-21 07:34:32

标签: c++

我有很多动态创建的对象。这些对象是全局定义的。

    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中的向量中存储的对象的成员函数?我尝试了

的每一个组合
    *    ->   ()   []   (*)

没有成功。我也知道我可能因为这种代码而受到批评,因为它严重依赖于原始指针的使用,并对所有权主题提出质疑。但是,我真的想知道如何实现这项工作?

1 个答案:

答案 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;

}