Форум программистов, компьютерный форум CyberForum.ru

Удаление из двумерного вектора - C++

Восстановить пароль Регистрация
 
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
16.08.2013, 22:47     Удаление из двумерного вектора #1
Привет всем! у меня такой вопрос...создал двумерный вектор и хочу удалить i строку и i столбец...а получается так что удаляет i строка и последний столбец... как сделать чтобы удалялся i строка и i столбец ?
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
int main()
{ 
    vector<vector<int>> t = { { 1, 2, 3, 4 },
                                        { 5, 6, 7, 8 },
                                        { 9, 10, 11, 12 },
                                        { 13, 14, 15, 16 }
                                      };
 
    for(int i = 0; i < t.size(); i++)
    {
        for(int j = 0; j < t.size(); j++)
            cout<<t[i][j]<<'\t';
        cout<<endl;
    }
 
    t.erase(t.begin() + 1);
 
    cout<<endl;
    for(int i = 0; i < t.size(); i++)
    {
        for(int j = 0; j < t.size(); j++)
            cout<<t[i][j]<<'\t';
        cout<<endl;
    }
    cout<<endl;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.08.2013, 22:52     Удаление из двумерного вектора #2
чтобы удалить i-ый столбец, у каждой строки нужно удалить i элемент:
схематично:
C++
1
2
3
4
foreach line
  t[line].erase(t[line].begin() + i)
 
// t[line] -  возвращает line строку, которая есть вектор, у которого нужно позвать erase
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
16.08.2013, 23:12  [ТС]     Удаление из двумерного вектора #3
DU, теперь другая проблема появилось...как теперь удалить строку? получается так что после твоего метода удаления столбца вызываю функцию t.erase(t.begin()); чтобы удалить первую строку, и получает что удаляется строка и последний столбец...
как это исправить ?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.08.2013, 23:15     Удаление из двумерного вектора #4
весь код в студию.
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
16.08.2013, 23:19  [ТС]     Удаление из двумерного вектора #5
DU,
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
vector<vector<int>> t = { { 1, 2, 3, 4 },
                              { 5, 6, 7, 8 },
                              { 9, 10, 11, 12 },
                            };
 
    for(size_t i = 0; i < t.size(); i++)
    {
        for(size_t j = 0; j < t.size(); j++)
            cout<<t[i][j]<<'\t';
        cout<<endl;
    }
 
    cout<<endl;
 
    for(size_t i = 0; i < t.size(); i++)
        t[i].erase(t[i].begin());
    t.erase(t.begin());
 
 
    cout<<endl;
    for(size_t i = 0; i < t.size(); i++)
    {
        for(size_t j = 0; j < t.size(); j++)
            cout<<t[i][j]<<'\t';
        cout<<endl;
    }
    cout<<endl;
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.08.2013, 23:28     Удаление из двумерного вектора #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
#include <string>
#include <iostream>
#include <vector>
 
typedef std::vector<std::vector<int>> Matrix;
 
void PrintMatrix(const Matrix& m)
{
  std::cout << std::endl;
  for (size_t i = 0; i < m.size(); i++)
  {
    for (size_t j = 0; j < m.size(); j++)
      std::cout << m[i][j]<<'\t';
    std::cout << std::endl;
  }
}
 
void Erase(Matrix& m, size_t i, size_t j)
{
  // TODO: check if i and j are not out of range
 
  m.erase(m.begin() + i);
  for (auto& line : m)
  {
    line.erase(line.begin() + j);
  }
}
 
int main()
{ 
  //vector<vector<int>> t = { { 1, 2, 3, 4 },
  //                                      { 5, 6, 7, 8 },
  //                                      { 9, 10, 11, 12 },
  //                                      { 13, 14, 15, 16 }
  //                                    };
  Matrix m(3, std::vector<int>(3, 0));
  m[0][0] = 11;
  m[0][1] = 12;
  m[0][2] = 13;
 
  m[1][0] = 21;
  m[1][1] = 22;
  m[1][2] = 23;
 
  m[2][0] = 31;
  m[2][1] = 32;
  m[2][2] = 33;
 
  PrintMatrix(m);
 
  Erase(m, 1, 1);
 
  PrintMatrix(m);
 
  return 0;
}
Yandex
Объявления
16.08.2013, 23:28     Удаление из двумерного вектора
Ответ Создать тему
Опции темы

Текущее время: 17:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru