2015-02-04 2 views
-3

Вопрос:Доступ к многомерным C++ станд :: вектор

Если у меня есть указатель на 1D станд :: вектор я могу получить доступ к его содержимому через функцию at(index) как

std::vector<T> *ptr_to_vec; 
T vec_value = ptr_to_vec->at(index); 

Есть ли способ использования этого для многомерного std :: vector, или я застреваю с разыменованием указателя?

std::vector<vector<T> > *ptr_to_2Dvec; 
T 2Dvec_value = (*ptr_to_2Dvec)[index1][index2]; 

Я хотел бы избежать разыменования указателя в коде.

+3

так что не так с 'ptr-> at (index1) [index2]'? Кстати, вы ** понимаете, что оператор '->' также разделяет указатель? Кроме того, будет работать и оператор 'ptr-> [] (index1) [index2]'. –

+1

У вас есть указатель на «что-то». Вы не получаете этого «чего-то» без разыгрывания, Liking это не имеет значения. – WhozCraig

+1

Самый эффективный способ избежать указателей разыменования, в моем личном опыте, - не использовать указатели. – molbdnilo

ответ

4

Вы должны разыменовать указатель для доступа к внешнему вектору, как и для одномерного вектора (используя ->, а не *). Вы можете использовать at, а не operator[] на любом из векторов, если хотите.

ptr_to_vec->at(index1).at(index2); 

Я хотел бы избежать разыменования указателя в коде.

Вы можете сделать это, избегая указателей. Это хорошая идея, если вы можете - с помощью ссылки или прямого доступа к переменной - но информации недостаточно, чтобы определить, является ли это вариантом в вашем случае.

0

Есть ли причина, по которой вам нужно использовать указатель на vector? Если вы просто используете его как переменную стека, на самом деле нет причин использовать указатель, и если вы передаете его функции или классу, вы можете использовать ссылку вместо этого (или myclass(vector<vector<T> > &vec)). С точки зрения синтаксиса это означало бы отсутствие разыменования.

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