Копирование одного измерения двухмерного массива в другую часть того же массива

0

Я новичок в C++.

Для двумерного массива, определенного как:

boolean myArray[3][8];

и я хочу перетасовать ячейки вокруг в элементах первого измерения вокруг так, что, скажем, myArray[2][........] копируется в myArray[2][........],

Я бы обычно перебирал массив с помощью вложенного цикла, который копирует каждую ячейку. Есть лучший способ сделать это? Другими словами, есть ли способ скопировать одно измерение двумерного массива в другую часть этого массива с одной командой какого-то рода?

  • 1
    boy I hope I haven't made this unintelligible - ну, может быть, если ваш источник и цель не были идентичны ...
  • 1
    Вы можете сделать что-то вроде memcpy(myArray[0], myArray[2], 8); скопировать с 1 на другой. Это то, что вы ищете?
Теги:
arrays

2 ответа

1
Лучший ответ

В этом примере программа объявляет следующий 2D-массив int (вместо bool):

3 5 7 9 11 13 15 17 
8 7 6 5 4 3 2 1 
2 4 6 8 10 12 14 16 

и демонстрирует, как переключать данные между первым и последним индексами:

#include <stdio.h>
#include <string.h>

int main() 
{
    int myArray[3][8] =
    {
      { 3, 5, 7, 9, 11, 13, 15, 17 },
      { 8, 7, 6, 5, 4, 3, 2, 1 },
      { 2, 4, 6, 8, 10, 12, 14, 16 }
    };

    // Copy data from index 2 to index 0
    int bkup[8] = { 0 };
    memcpy(bkup, myArray[0], sizeof(myArray[0]));
    memcpy(myArray[0], myArray[2], sizeof(myArray[2]));
    memcpy(myArray[2], bkup, sizeof(bkup));

    // Print array content to the screen
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 8; j++)
            printf("%d ", myArray[i][j]);
        printf("\n");
    }      

    return 0;
}

Вывод:

2 4 6 8 10 12 14 16 
8 7 6 5 4 3 2 1 
3 5 7 9 11 13 15 17 
  • 0
    Просто измените тип данных массива на bool и инициализируйте его значениями true или false и все будет хорошо.
  • 0
    Начиная с C ++ 11, вы можете напрямую выполнить std::swap(myArray[0], myArray[2]);
Показать ещё 1 комментарий
0

Вы можете использовать:

memmove(&myArray[2], &myArray[2][2], 4);

Скопировать некоторые байты из второго массива в начало самого себя.

  • 0
    Если вам это нужно для перекрытия памяти, например, во второй части «не делайте этого», я думаю, что вам лучше придерживаться цикла и делать это вручную - таким образом вы гарантируете целостность памяти.
  • 1
    memmove (& myArray [2], & myArray [2] [2], 4 * sizeof (логическое)) для спасения!
Показать ещё 1 комментарий
Сообщество Overcoder
Наверх
Меню