在C++中使用指针用一个for循环赋值矩阵。

问题描述 投票:0回答:1

假设有一个矩阵,arr[10][10]。我希望能够在一个for循环中给每个元素赋值。我所看到的所有解决方案(甚至是使用指针的)都有两个for循环。

c++ pointers matrix
1个回答
0
投票

真的有很多可能性。它们依赖于数组的内存连续分配。

所以,我不推荐任何一种方案。请看。

#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++中使用普通的C-Style数组。你不应该为自有内存使用原始指针。

© www.soinside.com 2019 - 2024. All rights reserved.