在下面的代码中,确切地说是matrix.size()
和matrix[0].size()
之间的区别?
int matrixElementsSum(std::vector<std::vector<int>> m) {
int s = 0;
for (int j = 0; j < m[0].size(); j++) {
for (int i = 0; i < m.size(); i++) {
if (m[i][j] == 0) {
break;
}
s += m[i][j];
}
}
return s;
}
答案 0 :(得分:2)
说你有:
std::vector<std::vector<int>> m(10, std::vector(20);
m.size()
将为10,std::vector<int>
中m
的数量
m[0].size()
将为int
中的数字m[0]
为20。
将其与2D数组进行比较,如果您有:
int m[10][20];
sizeof(m)/sizeof(m[0])
将为10,m
中的行数
sizeof(m[0])/sizeof(m[0][0])
将为20,m[0]
中的列数。
答案 1 :(得分:1)
确切含义如下。 C ++中没有真正的2d向量,但std::vector<T>
包含std::vector<T>
。
如果声明向量std::vector<int> vec(10)
,则会有一个包含10个元素的向量。所以vec.size()
是10.
如果声明std::vector<std::vector<int>> vec(10, std::vector<int>(10))
,您有一个包含10个元素的向量,每个元素包含一个包含10个元素的向量。因此vec[0]
的类型为std::vector<int>
。
如果您想知道此向量(含义vec[0]
)包含多少元素,您可以轻松地执行vec[0].size()
。
如果你想要元素的总数,你必须计算vec
中包含多少向量乘以每个向量包含的元素数。因此vec.size()*vec[0].size()
。
让我们得出结论:
我们有std::vector<std::vector<int>> vec(10,std::vector<int>(10))
:
std::vector<int>
中包含vec
的数量):vec.size()
std::vector<int>
中包含的元素数量):vec[0].size()
vec.size()*vec[0].size()