我是c ++的初学者,我想创建一个从矩阵中删除一行的程序..就像,如果我说3 3 2 1 2 3需要显示1 2 3 4 5 6 7 8 9 7 8 9 该程序的工作方式如下:3 =行,3 =列,2 =删除的行。 " 3 3 2"不是一排...... 我写了这个:
#include <iostream>
using namespace std;
int main() {
int N, M, v[100][100];
cin>>N>>M;
int i,j,p;
cin>>p;
for (i = 1; i <= N; ++i)
for (j = 1; j <= M; ++j)
cin>>v[i][j];
for (i = 1; i <= N; ++i) {
for (j = 1; j <= M; ++j)
cout<<v[i][j]<<" ";
cout<<"\n";
}
for (i = p; i < N; ++i)
v[i][j]=v[i+1][j];
--N;
for (i = 1; i <= N; ++i){
for (j = 1; j <= N; ++j)
cout<<v[i][j]<<' ';
cout<<"\n";
}
return 0;
}
但它不起作用......有人可以帮助我吗?
答案 0 :(得分:0)
这不起作用,您认为j
在此代码中做了什么?
for (i = p; i < N; ++i)
v[i][j]=v[i+1][j];
--N;
您需要遍历行和列。复制每行中要删除的行的每列。换句话说,你需要嵌套循环
for (i = p; i < N; ++i)
for (j = 1; j <= M; ++j)
v[i][j] = v[i+1][j];
--N;
答案 1 :(得分:0)
修改后的代码(它会正常工作):
#include <iostream>
using namespace std;
int main()
{
int N, M, v[100][100];
cin>>N>>M;
int i,j,p;
cin>>p;
for (i = 1; i <= N; ++i)
for (j = 1; j <= M; ++j)
cin>>v[i][j];
for (i = 1; i <= N; ++i)
{
for (j = 1; j <= M; ++j)
cout<<v[i][j]<<" ";
cout<<"\n";
}
for (i = p; i < N; ++i)
for(j=1; j<=M; ++j)
v[i][j]=v[i+1][j];
--N;
for (i = 1; i <= N; ++i)
{
for (j = 1; j <= M; ++j)
cout<<v[i][j]<<' ';
cout<<"\n";
}
return 0;
}
答案 2 :(得分:0)
您应该使用vector
#include <vector>
#include <iostream>
using namespace std;
int main()
{
//matrix
vector< vector<int> > V;
//To Add
for(int i=0; i<100; i++)
{
vector<int> R;
for(int j=0; j<100; j++)
{
int x;
cin>>x;
R.push_back(x);
}
V.push_back(R);
}
//To delete a row
int row_to_delete = 2;
V.erase(V.begin() + row_to_delete);
//To access
for(int i=0; i<V.size(); i++)
{
for(int j=0; j<V[i].size(); j++)
{
cout<<V[i][j];
}
}
}
vector<T>
是使用模板创建动态数组的类。
vector<int>
是一个var数组int。 V.push_back(T)
可以向T类型的数组添加元素,而V.erase(V.begin() + int )
可以在这种情况下删除要数组的元素一行。使用V.size()
,您可以在数组内部进行元素计数。