如何处理二维数组
how to handle the two dimensional array
void printMatrix(int matrix[][], int edge)
{
int i,j;
for (i=0; i<edge; ++i) {
for (j=0; j<edge; ++j) {
std:cout<<matrix[i][j]<<" ";
}
std::cout<<std::endl;
}
}
如果我在 Java 中这样做似乎很好,但在 C++ 中,它表明指向不完整类型'int []'
使用
一个二元数组作为ls。并自己计算尺寸
将多维数组传递给函数时,必须填写除第一个维度之外的所有维度。那是arr[][X], arr[][X][Y], ...
.
编译器知道如何根据维度进行数组位置数学运算。例如,arr[][5]
表示每行包含 5 个元素,因此arr[2][0]
从一开始就采用 10 个元素。所以第一个维度不是必需的,但所有其他维度都是必需的。
你根本不应该使用原始数组。 std::array
好多了。如果希望大小不是类型的一部分,则应使用 std::vector
。在某些情况下,您可能需要使用原始数组或原始指针,但这不是您作为初学者应该担心的事情。
下面是如何执行操作的示例(假设 C++11 支持)。这也使用了常量正确性和新的 foreach 功能。我不记得确切的语法,但它应该看起来像这样。
void printMatrix(const std::vector<std::vector<int>> matrix)
{
for(const auto& row : matrix){
for(int x : row){
std::cout << x << " ";
}
std::cout<<std::endl;
}
}
C++ 不传递数组的大小或维数,它只传递数组开头的地址(即指针)。您可以通过使用带有引用的模板函数来解决此问题。这样,矩阵的大小在编译时是已知的。
template<int X, int Y>
void printMatrix(int (&matrix)[X][Y], int edge)
{
int i,j;
for (i=0; i<edge; ++i) {
for (j=0; j<edge; ++j) {
std:cout<<matrix[i][j]<<" ";
}
std::cout<<std::endl;
}
}
如果你有一个方阵,你可以这样做:
void printMatrix(int matrix[], int edge)
{
int i,j;
for (j=0; j<edge; ++j) {
for (i=0; i<edge; ++i) {
std:cout << matrix[j*edge + i] << " ";
}
std::cout << std::endl;
}
}
本质上,将行(或列,由您决定)一个接一个地存储在 1D 数组中。请注意,内部循环遍历j
- 这样循环将访问内存中的连续单元格。
然后,代码的其余部分应使用相同的约定。
但是,如果您为添加到代码中的每个类、模板、设计模式等获得报酬(或获得积分),则这种方法并不是最好的。
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 创建 std::string 的二维数组的最佳做法
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 元素在二维数组 c++ 中的出现次数
- 执行 c++ 二维数组
- 如何处理二维数组
- 在 Matlab 中调用C++函数,处理二维数组,指针指针
- 我如何使用条件结果来告诉程序要处理哪个二维数组?