网上搜动态二维数组,大多都先确定行或者列然后用指针操作实现。并不能做到行列都未知的情况下存储数据。为了方便以后操作封装一下代码:
#include <iostream>
#include <vector>
#include <sstream>
using namespacestd;
typedef int xc_type;
vector<xc_type> xc_getline()
{
vector<int> v;
string line;
getline(cin, line);
istringstream iss(line);
for (int d; iss >> d; v.push_back(d)) {}
return v;
}
xc_type getvalue(vector<vector<int>>alldata,int row,int colume)
{
xc_type value =0;
if (row >=alldata.size())return value;
vector<xc_type>v = alldata.at(row);
if (colume >= v.size())return value;
value = v.at(colume);
return value;
}
void setvalue(vector<vector<xc_type>>*alldata,int row,int colume,xc_type value)
{
if (row >=alldata->size())return;
vector<xc_type>*v = &(alldata->at(row));
if (colume >= v->size())return;
v->at(colume) = value;
return;
}
void scanalldata(vector<vector<xc_type>>alldata)
{
vector<xc_type> v;
for (int i =0 ; i < alldata.size(); i ++) {
v = alldata.at(i);
for (int i =0 ; i < v.size(); i ++) {
cout<<v.at(i)<<' ';
}
cout<<endl;
}
}
int main(int argc,const char * argv[]) {
vector<vector<int>>alldata;
// 以回车为结尾符号
vector<xc_type> v;
v = xc_getline();
while (v.size()) {
alldata.push_back(v);
v = xc_getline();
}
scanalldata(alldata);
return0;
}
代码不难,应该能看懂,后续应加工成邻接矩阵。
有bug的地方请指出。