假设有一个矩阵,arr[10][10]。我希望能够在一个for循环中给每个元素赋值。我所看到的所有解决方案(甚至是使用指针的)都有两个for循环。
真的有很多可能性。它们依赖于数组的内存连续分配。
所以,我不推荐任何一种方案。请看。
#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数组。你不应该为自有内存使用原始指针。