我正在尝试建立一个像扫描程序从stdin中读取程序的扫雷程序。 输入格式为
4 4
..*.
*...
....
**..
我已定义vector< vector<char> > mine_field
并已将其调整为字段的尺寸。我设想在这样的时间读取输入中的一行(当然这只是第一行)
cin >> mine_field[0];
然而,这不起作用。最好的方法是什么?
编辑:我还考虑过循环并将值存储在每个索引中,但是这不会尝试将整个string
放在每个索引中只有空间的地方char
?
答案 0 :(得分:6)
首先,您需要将矢量调整到限制(rowSize,colSize)。
vector<vector<char> > mine_field (rowSize, vector<char> (colSize));
类似地,您可以使用相同的声明初始化所有位置。
vector<vector<char> > mine_field (rowSize, vector<char> (colSize, 'a'));
将使用char a
初始化mine_field向量中的所有位置。
要从cin
阅读,请正常阅读:
for (int i = 0; i < rowSize; i++){
for (int j = 0; j < colSize; j++){
cin >> mine_field[i][j];
}
}`
答案 1 :(得分:1)
首先需要cin >> vector<char>
根据您的定义。然后vector <vector<char> >
,以下供您参考:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <vector<char> > mine_field;
int row, col;
char c;
vector<char> line;
for (row=0; row<4; ++row)
{
line.clear();
for (col=0; col<4; ++col)
{
cin >> c;
line.push_back(c);
}
mine_field.push_back(line);
}
vector<vector<char> >::iterator it = mine_field.begin();
cout << "print result: " << endl;
for(;it!=mine_field.end(); ++it)
{
vector<char>::iterator itIn = it->begin();
for(; itIn!=it->end(); ++itIn)
cout <<*itIn;
cout << endl;
}
return 0;
}