#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 использует указатели для векторного типа