如果所有行都一样长(因为它是一个矩阵),我建议您编写一个自定义类 Matrix 而不是使用 vector<vector<int>>(这肯定有效)。
这样的类可以暴露如下接口:
int getWidth()
int getHeight()
int get(int x, int y)
void set(int x, int y, int value)
人们可以想到额外的函数(如乘法等),并且可以更轻松地访问和存储。 (Matrix m_matrix; 看起来比 std::vector<std::vector<int>> m_matrix 更好,不是吗?)。
根据您的喜好,您可以在内部使用int[][] 或std::vector<std::vector<int>> 来存储实际数据。
还要注意,这样的类还会强制执行矩阵可能具有的限制,例如,就像我在第一句话中提到的,同样长的行。
要真正反序列化这个字符串,抽象地说,你必须遍历每行递增一个计数器,然后遍历每一个递增另一个计数器的数字。
然后在每次迭代中调用myMatrix.set(x,y,parsedValue);
一个可能的实现可能如下所示:
std::string line;
int x = 0;
int y = 0;
int value;
while ( getline( std::cin, line ) ) {
std::istringstream is( line );
while(!is.eof()) {
is >> value;
myMatrix.set(x,y,value)
x++
}
y++
}
请注意,您首先必须用适当的大小初始化 myMatrix(至少如果您使用数组,如果您使用向量,您可以跳过它)
这可能是因为这个解决方案听起来要复杂得多(是的,它确实需要更多的时间来实现),但最后,如果你想编写一个易于维护的程序并希望使用多个 Matrix 实例,这肯定是要走的路。请注意,这只是一个建议,界面当然可以看起来不同。