为什么下面的C++代码运行后显示vector下标越界,求大神帮忙

#include<iostream>
#include<vector>
#include<cstdlib>
using namespace std;

int main()
{
vector<int> v;
vector<vector<int>> v1;
int n, m;
cout << "input n,m:";
cin >> n >> m;
for (int i = 0; i < n*m; i++)
{
v.push_back(rand() % 100);
}
v1.resize(n);
for (int i = 0; i < n; i++)
v1[n].resize(m);
cout << "before sorting:" << endl;
int k = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
v1[i][j] = v[k];
k++;
cout << v1[n][m] << "\t";
}
cout << "\n";
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m-1; j++)
{
if (v1[i][j]>v1[i][j + 1])
{
int t;
t = v1[i][j];
v1[i][j] = v1[i][j + 1];
v1[i][j + 1] = t;
}
}
}
cout << "after sorting:" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << v1[i][j] << "\t";
}
cout << "\n";
}
return 0;
}

第1个回答  2014-03-14
改后的代码:错误1是把二维vector当一维用了。
错误2是越界。
#include<iostream>

#include<vector>
#include<cstdlib>
using namespace std;

int main()
{
vector<int> v;
vector<vector<int>> v1;
int n, m;
cout << "input n,m:";
cin >> n >> m;
for (int i = 0; i < n*m; i++)
{
v.push_back(rand() % 100);
}
v1.resize(n);
for (int i = 0; i < n; i++)
v1[i].resize(m); // 错误1
cout << "before sorting:" << endl;

int k = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
v1[i][j] = v[k];
k++;
//cout << v1[n][m] << "\t"; // 错误2
}
cout << "\n";
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m-1; j++)
{
if (v1[i][j]>v1[i][j + 1])
{
int t;
t = v1[i][j];
v1[i][j] = v1[i][j + 1];
v1[i][j + 1] = t;
}
}
}
cout << "after sorting:" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << v1[i][j] << "\t";
}
cout << "\n";
}
system("pause");
return 0;
}本回答被提问者采纳
相似回答