2015-01-22 3 views
0

У меня в основном куб с номерами 1-6 (для монополии, например), хранящейся вC++ подпрограммы вектора <вектора <short>> указатель

vector<vector<short> > cube; 

это выглядит следующим образом:

0300 
5126 
0400 

У меня есть код для вращения его вверх:

short tmp=cube[0][1]; 
cube[0][1]=cube[1][1]; 
cube[1][1]=cube[2][1]; 
cube[2][1]=tmp; 

Мой вопрос, как я могу создать функцию из этого кода с указатели или что-то simmilar, поэтому мне не нужно копировать этот вектор в функцию, но просто изменить существующий вектор? Что-то вроде:

void rotateCubeUp(vector<vector<short> >cube){ 
    short tmp=cube[0][1]; 
    cube[0][1]=cube[1][1]; 
    cube[1][1]=cube[2][1]; 
    cube[2][1]=tmp; 
} 

Но это без указателей.

+0

Передайте вектор по ссылке, а не по значению. – PaulMcKenzie

+1

'vector >' не похоже на разумное представление для матрицы. Стандартная матрица целиком изображена в том, что она левая или правая, и, скажем, какая сторона направлена ​​вверх и какая сторона обращена к фронту. В основном это всего лишь 60 конфигураций; и вращения могут быть сохранены в виде перестановок из них. –

+1

Повторение [мой предыдущий совет] (http://stackoverflow.com/a/28087605/560648): отбросьте этот вложенный векторный бизнес. –

ответ

1

Передайте вектор по ссылке. Ссылка - это просто псевдоним. Пожалуйста, прочитайте о ссылке и когда ее использовать в деталях. Это очень полезная концепция в C++.

void rotateCubeUp(vector< vector<short> >& cube){ 
    short tmp=cube[0][1]; 
    cube[0][1]=cube[1][1]; 
    cube[1][1]=cube[2][1]; 
    cube[2][1]=tmp; 
} 

Предложение: Используйте «at» вместо «[]» при доступе к векторным элементам. [] не обеспечивает проверку индекса.

+0

Спасибо, это именно то, что мне нужно! – Dominik

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