如何在c ++中从控制台创建矩阵(使用vector stl)? (即不知道矩阵的大小)

时间:2016-04-29 06:46:41

标签: c++ matrix stl

我正在研究一个使用STL向量创建矩阵类的代码。我希望用户输入(在控制台上)为:

1 2 3
4 5 6

1 2 3
4 5 6
7 8 9

就是这样,没有别的。即代码应该能够从输入本身获取行数和列数(而不是明确询问用户)。

有人可以指导我吗?

2 个答案:

答案 0 :(得分:0)

我会一次读取一行输入行,直到一行为空。

#include<iostream>
#include<string>
using namespace std;
int main(){
  string s,s1;
  do{
    getline (std::cin, s);
    s1+=s;
  }while(s.length()>0);
 cout<<s1;
 return 0;
}

不是添加到s1,而是需要编写一个简单的函数来将字符串s拆分为数字,在第一步存储列数,测试列数是否发生变化(抛出错误),增加每一步的行数,当然,将矩阵的元素存储在一个向量中。完成后,您可以构建矩阵

答案 1 :(得分:0)

好的..我找到了办法。谢谢Andrei .. 我是这样做的..

#include<iostream>
#include<vector>
#include<string>
#include <sstream>
#include <iterator>

using namespace std;


int main() {
        vector <vector <double> > v;
        string s;
        int count=0, ncol=0,check=0,nrow=0;
        while(1) {
                getline(cin,s);
                if (s.length() == 0)
                        break;
                for (int i=0; i<s.length(); i++)
                        if (s[i]==' ')
                                count++;
                count++;
                if (check==0) {
                        check++;
                        ncol=count;
                }
                if (count != ncol) {
                        cout << "ncol should be same in each row!" <<endl;
                        break;
                }
                v.resize(nrow+1);
                istringstream buf(s);
                istream_iterator<string> beg(buf), end;
                vector<string> dummy(beg, end);
                for (int i=0; i<ncol;i++) 
                        v[nrow].push_back(stod(dummy[i]));
                nrow++;
                count=0;
        }
        //print the vector 'v' here
}