2 / 2 / 0
Регистрация: 04.09.2009
Сообщений: 5
1

Как удалить строку/столбец из двумерного вектора?

04.09.2009, 17:26. Показов 7056. Ответов 6
Метки нет (Все метки)

Прошу помощи. До самого не доходит.
Имеем вектор v[N] [M].
C++
1
std::vector<std::vector<int> > v( N, std::vector<int>M);
Как с помощью функции .erase() библиотеки vector удалить строчку x, чтоб массив стал v[N-1] [M]?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2009, 17:26
Ответы с готовыми решениями:

Как удалить нужную i-строку и j-столбец из двумерного массива?
Как удалить нужную i-строку и j-столбец из двумерного массива?

Из двумерного массива удалить строку и столбец на пересечении которых находится минимальный элемент
Из двумерного массива удалить строку и столбец на пересечении которых находится минимальный элемент

Как заполнить первую строку и первый столбец динамического двумерного массива единицами?
как заполнить первую строку и первый столбец динамического двумерного массива единицами с++ ? А...

Удалить k строку и n столбец из двумерного массива с использованием указателей
Нужно удалить k строку и n столбец из двумерного массива с использованием указателей. Перечитал...

6
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
04.09.2009, 21:24 2
Попробуй v.erase(v.begin()+x); Удалишь элемент номер х он же строка. Можешь таким образом удалить любую строку. Последняя соответсвенно v.erase(v.end()-1);
А вот со столбцами сложнее. придётся обращаться уже непосредственно к элементам и их удалять.
Пребирать нужно будет весь массив.
Может эксперты, что лучше подскажут.
0
Почетный модератор
7387 / 2633 / 280
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2009, 23:10 3
Цикл по вектору, например итератор i. И просто на каждой итерации вызываем erase для нашего итератора. Все просто.
0
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
05.09.2009, 18:05 4
ну так и я о том
0
2 / 2 / 0
Регистрация: 04.09.2009
Сообщений: 5
05.09.2009, 18:18  [ТС] 5
Цитата Сообщение от TanT Посмотреть сообщение
Попробуй v.erase(v.begin()+x);
А можно в виде кода??
0
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
05.09.2009, 20:23 6
Чёт меня понесло. вот..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <vector>
#include <iostream>
 
using namespace std;
 
typedef vector< vector<int> > Matrix;
typedef vector<int> Line;
 
void InitMatrix(Matrix&  m)
{
  int line=1;
  for (Matrix::iterator it_col=m.begin(); it_col!=m.end(); it_col++, line++)
    for (Line::iterator it_row=(*it_col).begin(); it_row!=(*it_col).end(); it_row++)
     *((*it_col).begin())=line;
}
 
void PrintMatrix(Matrix&  m)
{
  int line=1;
  for (Matrix::iterator it_col=m.begin(); it_col!=m.end(); it_col++, line++)
  {   cout<<"Line:"; cout.width(2);  cout<<line;
    for (Line::iterator it_row=(*it_col).begin(); it_row!=(*it_col).end(); it_row++)
    { cout.width(3);
      cout<<" "<<*((*it_col).begin());
    } 
    cout<<endl;
  }
}
 
 
void DeleteLine(Matrix& m, int numb)
{
  if (!m.empty())
  { int n=1;
    for (Matrix::iterator it_col=m.begin(); it_col!=m.end(); it_col++, n++)
    {
      if (n==numb)
      { m.erase(it_col); return;}
    } 
    cout<<"Not Line"<<endl;
  }// end  if (!m.empty())
  else
    cout<<"empty"<<endl;
}
 
void main()
{
  int M=10, N=10;
  Matrix v( N, Line (M, 1));
 
  cout<<"Init matrix "<<endl;
  InitMatrix(v);    // çàïîëíÿåò ìàòðèöó
  cout<<"Print matrix with initial values"<<endl;
  PrintMatrix(v);   // âûâîä íà ýêðàí
  
  cout<<endl; 
  cout<<"Delete first line in matrix "<<endl; 
  DeleteLine(v, 1); // óäàëÿåò, åñëè ìîæåò, óêàçàííóþ ëèíèþ
  cout<<"Print result:"<<endl;
  PrintMatrix(v);
  system("PAUSE");
} // end  main()
Добавлено через 20 минут
А вот со столбцами, пробуй эту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <vector>
#include <iostream>
 
using namespace std;
 
typedef vector< vector<int> > Matrix;
typedef vector<int> Line;
 
void InitMatrix(Matrix&  m)
{
  int line=0;
  for (Matrix::iterator it_col=m.begin(); it_col!=m.end(); it_col++, line++)
  { line+=100;
    for (Line::iterator it_row=(*it_col).begin(); it_row!=(*it_col).end(); it_row++)
     *(it_row)=line++;
  }
}
 
void PrintMatrix(Matrix&  m)
{
  int line=1;
  for (Matrix::iterator it_col=m.begin(); it_col!=m.end(); it_col++, line++)
  {   cout<<"Line:"; cout.width(2);  cout<<line;
    for (Line::iterator it_row=(*it_col).begin(); it_row!=(*it_col).end(); it_row++)
    { cout.width(3);
      cout<<" "<<*(it_row);
    } 
    cout<<endl;
  }
}
 
 
void DeleteColum(Matrix& m, int numb)
{
  if (!m.empty())
  { int n;
    for (Matrix::iterator it_col=m.begin(); it_col!=m.end(); it_col++)
    {
      n=1;
      for (Line::iterator it_row=(*it_col).begin(); it_row!=(*it_col).end(); it_row++,n++)
        if (n==numb)
        { (*it_col).erase(it_row); break;}
    } 
  }// end  if (!m.empty())
  else
    cout<<"empty"<<endl;
}
 
void DeleteLine(Matrix& m, int numb)
{
  if (!m.empty())
  { int n=1;
  for (Matrix::iterator it_col=m.begin(); it_col!=m.end(); it_col++, n++)
  {
    if (n==numb)
    { m.erase(it_col); return;}
  } 
  cout<<"Not Line"<<endl;
  }// end  if (!m.empty())
  else
    cout<<"empty"<<endl;
}
 
void main()
{
  int M=5, N=5;
  Matrix v( N, Line (M, 1));
 
  cout<<"Iniå matrix "<<endl;
  InitMatrix(v);    // çàïîëíÿåò ìàòðèöó
  cout<<"Print matrix with initial values"<<endl;
  PrintMatrix(v);   // âûâîä íà ýêðàí
  
  cout<<endl; 
  cout<<"Delete first line in matrix "<<endl; 
  DeleteLine(v, 1); // óäàëÿåò, åñëè ìîæåò, óêàçàííóþ ëèíèþ
  DeleteColum(v, 4);
  DeleteColum(v, 1);
  cout<<"Print result:"<<endl;
  PrintMatrix(v);
  system("PAUSE");
} // end  main()
2
2 / 2 / 0
Регистрация: 04.09.2009
Сообщений: 5
07.09.2009, 09:33  [ТС] 7
БОЛЬШОЕ СПАСИБО. Но я думал, что все проблемы можно решить одной строчкой (.
ВООБЩЕ, меня не устраивает, что в MSDN прописаны только работа с одномерками. Дали бы хоть синтаксис для многомерок. Не обязательно с примером.
Всё отлично работает. Меня смутили первые цифры, а это просто нумерация строк. Сейчас код немного подправлю для людей топорного (моего) уровня, и выложу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2009, 09:33
Помогаю со студенческими работами здесь

Их двумерного массива удалить строку и столбец, на пересечении которых расположен минимальный элемен
Создайте двумерный массив целых чисел. Удалите из него строку и столбец, на пересечении которых...

Из двумерного массива удалить строку и столбец на пересечении которых находится минимальный элемент
Из двумерного массива удалить строку и столбец на пересечении которых находится минимальный...

Удалить из двумерного массива строку и столбец, на пересечении которых находится минимальный элемент
Сформировать двумерный массив .Удалить из него строку и столбец, на пересечении которых находится...

Как удалить "строку" или "столбец" из двумерного массива?
Не буду полностью разъяснять задачу. В общем есть двумерный массив: 1 2 0 2 0 0 1 0 1 0 2 2 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru