我想通过2D矢量从用户那里获取2D矩阵的输入。但是当我在下面做的时候,程序崩溃了!!!但为什么呢?
int m, n;
cin>>m>>n;
vector<vector<int> > v;
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
int a;
cin>>a;
v[i].push_back(a);
}
}
根据我的代码,解决方案是什么。
答案 0 :(得分:5)
在v[i].push_back(a);
循环内调用for
时,向量v
为空,使用v[i]
会导致未定义的行为。
您的代码应首先push_back
一个vector<int>
:
for (int i=0; i<m; i++)
{
v.push_back(vector<int>());
for (int j=0; j<n; j++)
{
int a;
cin >> a;
v[i].push_back(a);
}
}
另一种方法是将vector v
显式初始化为m
:
int m, n;
cin>>m>>n;
vector<vector<int> > v(m);
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
int a;
cin>>a;
v[i].push_back(a);
}
}
答案 1 :(得分:4)
由于你知道矩阵的大小,只需在填充之前调整v:
public void exportSubjectData(File outputFile, String subNum) throws IOException, SQLException {
csvWrite = new CSVWriter(new FileWriter(outputFile));
curCSV = db.rawQuery("SELECT * FROM " + DATA_TABLE_NAME + " WHERE id = " + subNum, null);
csvWrite.writeNext(curCSV.getColumnNames());
while (curCSV.moveToNext()) {
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),
curCSV.getString(3), curCSV.getString(4), curCSV.getString(5),
curCSV.getString(6), curCSV.getString(7), curCSV.getString(8),
curCSV.getString(9), curCSV.getString(10)};
csvWrite.writeNext(arrStr);
}
csvWrite.close();
curCSV.close();
}
答案 2 :(得分:-1)
v [i]还没有被构造,你只需要首先初始化。这很简单:
vector<vector<int>> v;
v.reserve(m);
for(...)
...