Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
Infinum
1 / 1 / 0
Регистрация: 04.09.2009
Сообщений: 5
#1

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

04.09.2009, 17:26. Просмотров 2882. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2009, 17:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как удалить строку/столбец из двумерного вектора? (C++):

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

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

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

Как в матрице удалить одну строку и столбец? - C++
Как в матрице удалить одну строку и столбец?с++

Удалить столбец двумерного массива с++ - C++
Задача: удалить столбец двумерного динамического массива с++. Можно указать номер столбца, можно не указывать. Помогите, пожалуйста.

Удалить строку и столбец матрицы - C++
#include &lt;iostream&gt; using namespace std; void ReadMatr(int **a, int n, int m);//Ввод матрицы с клавиатуры void PrintMatr(int...

6
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
04.09.2009, 21:24 #2
Попробуй v.erase(v.begin()+x); Удалишь элемент номер х он же строка. Можешь таким образом удалить любую строку. Последняя соответсвенно v.erase(v.end()-1);
А вот со столбцами сложнее. придётся обращаться уже непосредственно к элементам и их удалять.
Пребирать нужно будет весь массив.
Может эксперты, что лучше подскажут.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.09.2009, 23:10 #3
Цикл по вектору, например итератор i. И просто на каждой итерации вызываем erase для нашего итератора. Все просто.
0
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
05.09.2009, 18:05 #4
ну так и я о том
0
Infinum
1 / 1 / 0
Регистрация: 04.09.2009
Сообщений: 5
05.09.2009, 18:18  [ТС] #5
Цитата Сообщение от TanT Посмотреть сообщение
Попробуй v.erase(v.begin()+x);
А можно в виде кода??
0
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
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
Infinum
1 / 1 / 0
Регистрация: 04.09.2009
Сообщений: 5
07.09.2009, 09:33  [ТС] #7
БОЛЬШОЕ СПАСИБО. Но я думал, что все проблемы можно решить одной строчкой (.
ВООБЩЕ, меня не устраивает, что в MSDN прописаны только работа с одномерками. Дали бы хоть синтаксис для многомерок. Не обязательно с примером.
Всё отлично работает. Меня смутили первые цифры, а это просто нумерация строк. Сейчас код немного подправлю для людей топорного (моего) уровня, и выложу.
0
07.09.2009, 09:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2009, 09:33
Привет! Вот еще темы с ответами:

Удалить из матрицы строку и столбец - C++
Привет всем ,помогите пожалуйста написать программу : Заранее спасибо всем. Добавлено через 11 часов 45 минут Никто не...

Удалить столбец и строку из матрицы - C++
Пытаюсь удалить из матрицы x строку strI и столбец stlbI путем создания &quot;временной матрицы&quot; a, удаления матрицы x, и перезаписывания a в x....

удалить строку из двумерного массива - C++
Помогите с лабой пожалуйста!!! нужно удалить строку в двумерном массиве, если в ней встречается хотя бы один отрицательный элемент. ...

В матрице удалить соответствующую строку или столбец - C++
Матрица состоит из нулей и единиц. Найдите в ней самую длинную цепочку подряд идущих нулей по горизонтали, вертикали. Удалить...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru