
13.11.2009, 23:49
|
|
Познающий
Регистрация: 15.03.2009
Сообщений: 77
Провел на форуме: 984248
Репутация:
73
|
|
Итак
шаблон функции я реализовал
Код:
#include <vector>
#include <algorithm>
enum Direction//перечисление сторон
{
Right = 0,
Left,
Up,
Down
};
template <typename T>
inline void shlrud(T **array, int size, int step, Direction dir)
{
vector<T> _v;//объявление вектора
for (int i =0; i < size; i++)
{
int j;
_v.clear();//очищаем вектор
for (j = 0; j < size; j++)
{
switch (dir)
{
case Right:
case Left:
_v.push_back(array[i][j]);//забиваем в вектор строчку массива
break;
case Down:
case Up:
_v.push_back(array[j][i]);//забиваем в вектор строчку массива
break;
}
}
switch (dir)
{
case Right:
case Down:
rotate(_v.begin(),//делаем циклический сдвиг
_v.end()-step,//методом разворотов
_v.end());
break;
case Left:
case Up:
rotate(_v.begin(),//делаем циклический сдвиг
_v.begin()+step,//методом разворотов
_v.end());
break;
}
for (j = 0; j < size; j++)
{
switch (dir)
{
case Right:
case Left:
array[i][j] = _v[j];//возвращаем обработанную строчку в массив
break;
case Down:
case Up:
array[j][i] = _v[j];//возвращаем обработанную строчку в массив
break;
}
}
}
}
Пользуйтесь на здоровье
Но проблема в другом:
Оказывается надо было написать без использования STL.
Последний раз редактировалось Mozy; 17.11.2009 в 23:52..
|
|
|