C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Эффективное копирование массивов / mini-FAQ / Visual C++

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

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

  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 () вместо вложенных циклов может быть весьма существенна.