| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблемы с масивами |
| Автор: Falcon(TFSoft) 31.5.2004, 14:16 |
| Здравствуте! Помогите мне пожайлуста порешить такуб проблему: Есть матрица, к примеру 3х3, надо сделать вот такой сдвиг: из такого 1 2 3 4 5 6 7 8 9 такой х 1 2 3 4 5 6 7 8 (х - любое число) Я конечно понимаю что єто можно сделать испоьзуя 2 цикла и просто переставляя значения. Но возмоно ли решить это все просто поменяв каки либо адресса переменных? Я не разбираюсь в Ассемблере и в пространстве адрессов, так что если это возможно помогите мне, расписав пример более подробно. С ув. Алексей. |
| Автор: mr.DUDA 31.5.2004, 14:25 |
| Если перед строкой массива память не выделена, то простым смещением указателя на 1 вверх не обойдешься. Придётся переставлять элементы. |
| Автор: Nastya 31.5.2004, 17:44 |
| Думаю вариат с дополнительным массивом и прочкой memcopy будет не лучшим, чем цилы |
| Автор: achmed 31.5.2004, 18:31 |
| если массив такой: int a[3][3]; то сдвиг можно сделать так: // где в начале файла, подключение шаблонов STL #include <algorithm> .... // ВОТ ОНО std::copy_backward(&a[0][0],&a[0][0] + 8,&a[0][0] + 9); вот, изучайте STL. |
| Автор: Baa 1.6.2004, 01:34 | ||||||
Какие шаблоны? Какой стл? Чтобы сделать подобное не надо ничего никуда подключать. Простой алгоритм...
Ну или как Настя предложила, только немного модифицируем её идею:
А вообще, все это сводится к этому:
|
| Автор: achmed 1.6.2004, 08:35 |
| >Какие шаблоны? шаблоны алгоритмов >Какой стл? Чтобы сделать подобное не надо ничего никуда подключать. Простой алгоритм... который реализован в STL , его использование улучшает читаемость кода. |
| Автор: mr.DUDA 1.6.2004, 10:13 |
| З.Ы. ни один из приведённых примеров не будет работать для динамического массива указателей на одномерные массивы (т.е. для **Arr). |
| Автор: Baa 1.6.2004, 13:52 | ||
achmed,
Читабельность этого - никакая. Максимальная читабельность с memcpy и с ассемблерным кодом. Если мы будем для каждого простого алгоритма пользоваться обертками и прочим, то код разрастетется до гигантских масштабов. Я не противник стл, просто считаю, что подобные простые алгоритмы следует реализовывать самому (в том числе и следует УМЕТЬ реализовывать, а не пользоваться тем, что для нас заготовили). Назовем это практикой ума |