如何从cin读入矢量

时间:2014-03-18 02:35:54

标签: c++ vector

我正在尝试建立一个像扫描程序从stdin中读取程序的扫雷程序。 输入格式为

4 4
..*.
*...
....
**..

我已定义vector< vector<char> > mine_field并已将其调整为字段的尺寸。我设想在这样的时间读取输入中的一行(当然这只是第一行)

 cin >> mine_field[0];

然而,这不起作用。最好的方法是什么?

编辑:我还考虑过循环并将值存储在每个索引中,但是这不会尝试将整个string放在每个索引中只有空间的地方char

2 个答案:

答案 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;
}