到目前为止,我已经能够使用1-d向量,通过推/弹回添加或删除元素。 然而,当试图填写一个应该代表矩阵的二维矢量时,我遇到了问题。我无法在我的2-d向量中使用这些功能。当代码编译并运行时,我得到要求维度的位,然后它要求第一个元素[1,1],对于输入的任何值,我得到“Segmentation fault:core dumped”。我不知道发生了什么,并且一直试图修改我的代码,但没有取得很大的成功,互联网在提供如何填写这些该死的东西的简单指南方面也毫无用处...... 非常感谢你!
这是我的代码
#include <iostream>
#include <vector>
using namespace std;
vector<vector<double> > readMatrix();
int main()
{
vector<vector<double> > matrix1 = readMatrix();
vector<vector<double> > matrix2 = readMatrix();
}
vector<vector<double> > readMatrix()
{
cout << "Entering a matrix" << endl;
cout << "Number of Lines : ";
int numberOfLines;
cin >> numberOfLines;
cout << "Number of Columns :";
int numberOfColumns;
cin >> numberOfColumns;
vector<vector<double> > matrix;
int i(0);
int j(0);
while(i<=numberOfLines && j<=numberOfColumns)
{
cout << "[" << i+1 << "," << j+1 << "] =" ;
int value;
cin >> value;
matrix[i].push_back(value);
cout << endl ;
j++;
if(j==numberOfColumns)
{
j=1;
i++;
}
}
return matrix;
}
答案 0 :(得分:0)
声明这样的矩阵:
vector<vector<double> > matrix (y, vector<double> (x, 0));
现在你有一个y * x矩阵。如果你想使用push_back
,你必须在新行开始时声明x向量。
答案 1 :(得分:0)
当你执行vector<vector<double> > matrix;
时,你初始化了一个大小为0的向量向量(这是默认值),所以即使在matrix[i].push_back(value)
i==0
时你也可以访问你没有的内存没有分配。如果你预先分配这样的内存会更好:
vector<vector<double> > matrix(numberOfLines,vector<double>(numberOfColumns));
然后你不需要推回或任何东西,只需matrix[i][j]=whatever
。
答案 2 :(得分:0)
在C ++中,您可以使用向量构造函数自动定义大小:
vector<vector<double> > matrix(numberOfLines, vector<double>(numberOfColumns, 0));
对于向量,for循环比while循环更好,因为大小总是已知的。我建议你用这些迭代迭代向量行和列(并删除你的push_back语句。)
答案 3 :(得分:0)
你需要做类似的事情:
matrix.resize( ... );
.
.
.
matrix[i].push_back( ... );
这里的问题是你没有二维向量。你有一个矢量,矢量,双打。你需要在第一个向量中放置一些向量,如上所述调用resize()
是一种方法。你也可以将一个初始大小传递给构造函数,你可以逐个推送向量 - 虽然这可能带来性能问题。