我想从矩阵中删除一行

时间:2018-01-26 19:18:51

标签: c++ matrix

我是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;
}

但它不起作用......有人可以帮助我吗?

3 个答案:

答案 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(),您可以在数组内部进行元素计数。