Как получить итератор 2d собственного массива

0

Сначала я ищу способ инициализировать весь массив в одном конкретном значении. Хотя я знаю, что memset() в <cstring> может это сделать, я хочу сделать это более C++.

Затем я узнаю, что std::fill() может быть способом сделать с одним размерным массивом

const int SIZE = 10;
int arr[SIZE];
std::fill(std::begin(arr), std::end(arr), 1);

Но это не работает, когда с 2d или многомерным массивом. Как я могу получить итератор многомерного массива?

Заранее спасибо.

  • 0
    небольшое замечание: std :: fill устанавливает для каждого члена указанное значение, memset заполняет каждый байт значением, поэтому для целых можно установить их, только если каждый байт имеет одинаковое значение (например, 0xFFFFFFFF, что означает -1 в дополнении 2)
  • 0
    @stefaanv Да, я знаю это, спасибо, что напомнили мне.
Теги:
multidimensional-array
iterator

1 ответ

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

2D-массивы смежны в памяти, поэтому вы можете делать

int arr[ROWS][COLS];
const size_t total_size = ROWS*COLS;
std::fill(&a[0][0], &a[0][0]+ total_size, 1);

где total_size - общее количество элементов.

  • 0
    Вы должны быть осторожны, что массив действительно является многомерным массивом, а не массивом указателей на другой массив. синтаксический доступ выглядит одинаково, но разметка памяти, конечно, совершенно иная.
  • 0
    Отлично работает. Большое спасибо! И что я хотел бы добавить, так это получить total_size const int total_size = sizeof arr / 4;
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню