Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Эффективное копирование массивов

Предположим, Вы хотите скопировать содержимое одного двумерного массива в другой:

  int weekly_hours[5][5];  // первый
   int another_array[5][5];  // второй
  

Можно просто использовать вложенный цикл, чтобы скопировать каждый элемент weekly_hours в another_array, как показано в примере:

  for (int i = 0; i<5; i++)
   {
     for (int j = 0; j < 5; j++)
     {
       second_array[i][j] = weekly_hours[i][j];
     }
   }
  

Однако, эта методика является чрезвычайно неэффективной. Программа проходит через каждый элемент массива, проверя условия и увеличивая счётчики. К счастью, есть намного более эффективный способ проделать данную операцию. Как C так C++ гарантируют, что элементы многомерных массивов занимают непрерывные адреса памяти. Другими словами, расположение в памяти weekly_hours идентично расположению в памяти массива в 25 целых чисел. Почему бы не воспользоваться данным фактом и не скопировать один многомерный массив на другой за один раз ? Для этого достаточно воспользоваться стандартной функцией memcpy():

  memcpy(second_array, weekly_hours, sizeof(second_array));
  

memcpy() объявлена в заголовочном файле <string.h> следующим образом:

  memcpy(void * destination, void * source, size_t bytes);
  

На многих платформах, memcpy () написан в высокооптимизированном ассемблерном коде. Поэтому, выгода от использования memcpy () вместо вложенных циклов может быть весьма существенна.

 

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS