Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/48: Рейтинг темы: голосов - 48, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 04.09.2009
Сообщений: 5

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

04.09.2009, 17:26. Показов 9600. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2009, 17:26
Ответы с готовыми решениями:

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

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

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

6
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
04.09.2009, 21:24
Попробуй v.erase(v.begin()+x); Удалишь элемент номер х он же строка. Можешь таким образом удалить любую строку. Последняя соответсвенно v.erase(v.end()-1);
А вот со столбцами сложнее. придётся обращаться уже непосредственно к элементам и их удалять.
Пребирать нужно будет весь массив.
Может эксперты, что лучше подскажут.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2009, 23:10
Цикл по вектору, например итератор i. И просто на каждой итерации вызываем erase для нашего итератора. Все просто.
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
05.09.2009, 18:05
ну так и я о том
0
2 / 2 / 0
Регистрация: 04.09.2009
Сообщений: 5
05.09.2009, 18:18  [ТС]
Цитата Сообщение от TanT Посмотреть сообщение
Попробуй v.erase(v.begin()+x);
А можно в виде кода??
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
05.09.2009, 20:23
Чёт меня понесло. вот..
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  [ТС]
БОЛЬШОЕ СПАСИБО. Но я думал, что все проблемы можно решить одной строчкой (.
ВООБЩЕ, меня не устраивает, что в MSDN прописаны только работа с одномерками. Дали бы хоть синтаксис для многомерок. Не обязательно с примером.
Всё отлично работает. Меня смутили первые цифры, а это просто нумерация строк. Сейчас код немного подправлю для людей топорного (моего) уровня, и выложу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.09.2009, 09:33
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru