Вектор, который содержит другие векторы, содержащие указатели на динамические объекты

#c

#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. GroupCntr[outer_index][inner_index]->object_member;

2. Все, что вам нужно знать, это как получить доступ к элементу вектора. Вот и все. Просто подумайте об этом немного.

Ответ №1:

Если вы хотите получить элемент, который вам нужно использовать, '[][]' первое [] — это доступ к vector, второе [] — это доступ к element.

Далее, чтобы получить доступ к элементу, вам нужно использовать оператор ‘->’

Вот один из примеров:

 #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;

}
  

Комментарии:

1. вы должны продемонстрировать, как работает комбинация [][]-> в вашем ответе, вместо использования целых чисел, поскольку OP использует указатели для векторного типа