Присвоение матриц одной для l oop с использованием указателей в C ++ - PullRequest
0 голосов
/ 26 апреля 2020

Предположим, есть матрица, обр [10] [10]. Я хочу иметь возможность присваивать значения каждому элементу только по одному для l oop. Все решения, которые я видел (даже те, которые используют указатели) имеют 2 для циклов.

1 Ответ

0 голосов
/ 26 апреля 2020

Есть действительно много возможностей. Они полагаются на непрерывное выделение памяти для массива.

Так что я бы не рекомендовал ни одну из них. Пожалуйста, смотрите:

#include <iostream>
#include <numeric>

constexpr size_t NumberOfRows = 10U;
constexpr size_t NumberOfColumns = 10U;
constexpr size_t NumberOfCells = NumberOfRows * NumberOfColumns;

int main() {

    // Definition of our array
    int data[NumberOfRows][NumberOfColumns];

    // Lambda to print the array on the screen
    auto print = [](int(&array2Dim)[NumberOfRows][NumberOfColumns]) { std::cout << "\n\n"; for (size_t r = 0U; r < NumberOfRows; ++r) {
        for (size_t c = 0U; c < NumberOfColumns; ++c) std::cout << array2Dim[r][c] << ' '; std::cout << '\n';
    }};

    // One possible solution
    for (int i = 0; i < NumberOfCells; i++) {
        *((*data)+i) = i;
    }
    print(data);

    // Other possible solution
    for (int i = 0; i < NumberOfCells; i++) {
        data[0][i]= i*2;
    }
    print(data);

    // 3rd solution: No loop
    std::iota(*data, *data + NumberOfCells, 500);
    print(data);

    return 0;
}

Кстати. Вы не должны использовать простые массивы C -Style в C ++. Вы не должны использовать необработанные указатели для собственной памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...