编程论坛
注册
登录
编程论坛
→
C++教室
如何用vector创建一个二维数组
busboy
发布于 2017-05-16 22:37, 2824 次点击
题目是
编写一个矩阵的转置的函数,矩阵的行数和列数在程序中由用户输入。
设计到数组的定义元素个数是变量,所有就想到用vector ,但是转置有需要二维以上的数组,这里vector创建二维数组貌似我买的书上没有讲到。
3 回复
#2
rjsp
2017-05-16 23:59
没有任何手段可以动态生成C/C++的“二维数组”,因为维度是编译期间的语法糖
估计你想要的是 vector<vector<TYPE>>,但你考虑两点
a,这种考试题目一般而言应该规定好了行数和列数的上限,如果不大的话,你可以定义一个最大的二维数组但只用一部分
b,你可以封装vector成二维数组,即将二维映射到一维对应的位置上
#3
rjsp
2017-05-17 08:44
一个二维数组演示
程序代码:
#include
<iostream>
#include
<vector>
/*
只写了最常用的部分,移动构造、initializer_list、swap、begin、end,行代理类 等等省略掉了。
*/
template
<
typename
T>
class
matrix
{
public
:
matrix( size_t rowsize, size_t colsize ) : rowsize_(rowsize), colsize_(colsize), values_(rowsize*colsize)
{
}
size_t rowsize()
const
{
return
rowsize_;
}
size_t colsize()
const
{
return
colsize_;
}
const
T& at( size_t row, size_t col )
const
{
return
values_.at( row*colsize_ + col );
}
T& at( size_t row, size_t col )
{
return
values_.at( row*colsize_ + col );
}
private
:
size_t rowsize_, colsize_;
std::vector<T> values_;
};
template
<
typename
T> std::istream&
operator
>>( std::istream& is, matrix<T>& mtx )
{
for
( size_t r=
0
; r!=mtx.rowsize(); ++r )
{
for
( size_t c=
0
; c!=mtx.colsize(); ++c )
{
if
( !(is>>mtx.at(r,c)) )
return
is;
}
}
return
is;
}
template
<
typename
T> std::ostream&
operator
<<( std::ostream& os,
const
matrix<T>& mtx )
{
for
( size_t r=
0
; r!=mtx.rowsize(); ++r )
{
for
( size_t c=
0
; c!=mtx.colsize(); ++c )
{
if
( !(os<<mtx.at(r,c)<<(c+
1
!=mtx.colsize()?
'
'
:
'
\n
'
)) )
return
os;
}
}
return
os;
}
using
namespace
std;
int
main(
void
)
{
matrix<
int
> mtx(
2
,
3
);
for
( size_t r=
0
; r!=mtx.rowsize(); ++r )
{
for
( size_t c=
0
; c!=mtx.colsize(); ++c )
{
mtx.at(r,c) = r*mtx.colsize()+c;
}
}
cout
<< mtx << endl;
}
#4
busboy
2017-05-17 10:27
回复 2楼 rjsp
我想过你说的b方案,我看只有这个还不错。。你下面给我的代码我好多东西都看不懂,我才初学呢。。
1