apmatrix是二维的,除此之外它与apvector很像。不同于向量的长度,apmatrix有两个维度,称为numrows和numcols,分别表示“行数”和“列数”。
矩阵中的每个元素用两个索引来识别,其中一个是行编号,另一个是列编号。
要创建一个矩阵,有四种可选的构造函数:
apmatrix<char> m1;
apmatrix<int> m2 (3, 4);
apmatrix<double> m3 (rows, cols, 0.0);
apmatrix<double> m4 (m3);
第一个构造函数什么都没做,它创建的矩阵行数和列数都是0。第二个有两个整型数类型的参数,依次是行数和列数的初始值。第三个构造函数添加了一个参数用于初始化矩阵的元素,其余与第二个相同。第四个是复制构造函数,它以另一个apmatrix对象为参数。
就像apvectors一样,我们可以创建任何类型的apmatrix对象 (包括apvector,甚至apmatrix等类型)。
要访问矩阵的元素,我们使用[]操作符来指定行和列的信息:
m2[0][0] = 1;
m3[1][2] = 10.0 * m2[0][0];
如果我们想尝试访问范围之外的元素,程序会打印错误信息并退出。
numrows和numcols两个函数分别获取矩阵的行数和列数。记住,行索引是0到numrows() -1之间的数,而列索引是0和numcols() -1之间的数。
常用嵌套循环来遍历矩阵。下面循环将矩阵中每个元素的值设置为其行索引和列索引的和:
for (int row=0; row < m2.numrows(); row++) {
for (int col=0; col < m2.numcols(); col++) {
m2[row][col] = row + col;
}
}
循环打印时,矩阵每一行的元素使用制表符分隔,列之间以换行符分隔:
for (int row=0; row < m2.numrows(); row++) {
for (int col=0; col < m2.numcols(); col++) {
cout << m2[row][col] << "\t";
}
cout << endl;
}