如何在C ++中找到2D数组的大小?是否有任何预定义的函数,如sizeof
来确定数组的大小?
此外,有人能告诉我如何在尝试获取未设置的值时检测数组的getvalue
方法中的错误吗?
答案 0 :(得分:27)
假设您只允许使用数组,那么您可以通过以下方式找到二维数组的大小。
int ary[][5] = { {1, 2, 3, 4, 5},
{6, 7, 8, 9, 0}
};
int rows = sizeof ary / sizeof ary[0]; // 2 rows
int cols = sizeof ary[0] / sizeof(int); // 5 cols
答案 1 :(得分:15)
sizeof(yourObj)/sizeOf(yourObj[0])
应该做的伎俩
答案 2 :(得分:12)
使用std::vector
。
std::vector< std::vector<int> > my_array; /* 2D Array */
my_array.size(); /* size of y */
my_array[0].size(); /* size of x */
或者,如果您只能使用好的数组,则可以使用sizeof
。
sizeof( my_array ); /* y size */
sizeof( my_array[0] ); /* x size */
答案 3 :(得分:8)
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
int arr[6][5] = {
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5}
};
int rows = sizeof(arr)/sizeof(arr[0]);
int cols = sizeof(arr[0])/sizeof(arr[0][0]);
cout<<rows<<" "<<cols<<endl;
return 0;
}
输出:6 5
答案 4 :(得分:2)
与_countof()宏一起,您可以使用指针表示法引用数组大小,其中数组名称本身引用行,数组名称附加的间接运算符引用该列。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int beans[3][4]{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
cout << "Row size = " << _countof(beans) // Output row size
<< "\nColumn size = " << _countof(*beans); // Output column size
cout << endl;
// Used in a for loop with a pointer.
int(*pbeans)[4]{ beans };
for (int i{}; i < _countof(beans); ++i) {
cout << endl;
for (int j{}; j < _countof(*beans); ++j) {
cout << setw(4) << pbeans[i][j];
}
};
cout << endl;
}
答案 5 :(得分:1)
#include<iostream>
using namespace std ;
int main()
{
int A[3][4] = { {1,2,3,4} , {4,5,7,8} , {9,10,11,12} } ;
for(int rows=0 ; rows<sizeof(A)/sizeof(*A) ; rows++)
{
for(int columns=0 ; columns< sizeof(*A) / sizeof(*A[0]) ; columns++)
{
cout<<A[rows][columns] <<"\t" ;
}
cout<<endl ;
}
}
答案 6 :(得分:0)
上面的其他答案已经回答了你的第一个问题。 至于你的第二个问题,如何检测获取未设置值的错误,我不确定你的意思是以下哪种情况:
使用无效索引访问数组元素:
如果你使用
std :: vector,你可以使用vector :: at函数代替[]运算符
如果索引无效,则获取值out_of_range异常
将被抛出。
访问有效索引,但尚未设置该元素: 据我所知,没有直接的方法。但是,以下 常见的做法可能会解决您的问题:(1)将所有元素初始化为您确定无法拥有的值。例如,如果您正在处理正整数,请将所有元素设置为-1,这样您就知道该值尚未设置 发现它是-1。 (2)。只需使用相同大小的bool数组即可 指示是否设置了相同索引的元素,这个 当所有值都“可能”时适用。
答案 7 :(得分:0)
int arr [5] [4];
对于行下标(4加到2,包括使用 pow 的cmath):
sizeof(arr1)/pow(4,2)
列下标:
sizeof(*arr1)/4
4表示4个字节,大小为int。
答案 8 :(得分:0)
这是第一部分的一种可能的解决方案
#include<iostream>
using namespace std;
int main()
{
int marks[][4] = {
10, 20, 30, 50,
40, 50, 60, 60,
10, 20, 10, 70
};
int rows = sizeof(marks)/sizeof(marks[0]);
int cols = sizeof(marks)/(sizeof(int)*rows);
for(int i=0; i<rows; i++)
{
for(int j=0; j<cols; j++)
{
cout<<marks[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
答案 9 :(得分:0)
也可以尝试获取二维数组的行列大小
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
int rows = matrix.size();
int cols = matrix[0].size();
cout<<rows<< " "<<cols;
输出: 3 4
答案 10 :(得分:0)
int rows = sizeof(arr)/sizeof(arr[0]);
int cols = sizeof(arr[0])/sizeof(arr[0][0]);