![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Falcon(TFSoft) |
|
|||
Unregistered |
Здравствуте!
Помогите мне пожайлуста порешить такуб проблему: Есть матрица, к примеру 3х3, надо сделать вот такой сдвиг: из такого 1 2 3 4 5 6 7 8 9 такой х 1 2 3 4 5 6 7 8 (х - любое число) Я конечно понимаю что єто можно сделать испоьзуя 2 цикла и просто переставляя значения. Но возмоно ли решить это все просто поменяв каки либо адресса переменных? Я не разбираюсь в Ассемблере и в пространстве адрессов, так что если это возможно помогите мне, расписав пример более подробно. С ув. Алексей. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Если перед строкой массива память не выделена, то простым смещением указателя на 1 вверх не обойдешься. Придётся переставлять элементы.
-------------------- ![]() |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Думаю вариат с дополнительным массивом и прочкой memcopy будет не лучшим, чем цилы
-------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
achmed |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 12.4.2004 Репутация: нет Всего: нет |
если массив такой:
int a[3][3]; то сдвиг можно сделать так: // где в начале файла, подключение шаблонов STL #include <algorithm> .... // ВОТ ОНО std::copy_backward(&a[0][0],&a[0][0] + 8,&a[0][0] + 9); вот, изучайте STL. |
|||
|
||||
Baa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Какие шаблоны? Какой стл? Чтобы сделать подобное не надо ничего никуда подключать. Простой алгоритм...
Ну или как Настя предложила, только немного модифицируем её идею:
А вообще, все это сводится к этому:
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
||||||
|
|||||||
achmed |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 12.4.2004 Репутация: нет Всего: нет |
>Какие шаблоны?
шаблоны алгоритмов >Какой стл? Чтобы сделать подобное не надо ничего никуда подключать. Простой алгоритм... который реализован в STL , его использование улучшает читаемость кода. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
З.Ы. ни один из приведённых примеров не будет работать для динамического массива указателей на одномерные массивы (т.е. для **Arr).
-------------------- ![]() |
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
achmed,
Читабельность этого - никакая. Максимальная читабельность с memcpy и с ассемблерным кодом. Если мы будем для каждого простого алгоритма пользоваться обертками и прочим, то код разрастетется до гигантских масштабов. Я не противник стл, просто считаю, что подобные простые алгоритмы следует реализовывать самому (в том числе и следует УМЕТЬ реализовывать, а не пользоваться тем, что для нас заготовили). Назовем это практикой ума ![]() -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |