2016-10-21 3 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(); 

Однако позже в моем коде я создаю вектор для хранения подобных векторов Тип объекта *

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

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

Смежные вопросы