c++ - Как присвоить значение элементу двумерного динамического массива, созданного с помощью контейнера <vector>


0

Массив задается следующим образом

vector < vector <int> > v;

Затем, когда я пытаюсь присвоить значения элементам массива, для вот такого присвоения

v[a][b] = i;

Компилятор выдает вот такое сообщение
error: invalid types gnu_cxx::alloc_traits::value_type {aka int}[int] for array subscript

А при присвоении с помощью функции

v[a].push_back(i);  

error: request for member push_back in v.std::vector::operatora)), which is of non-class type gnu_cxx::alloc_traits::value_type {aka int} v[a].push_back(i);

Как исправить эту ошибку, чтобы можно было присваивать значения и прямым обращением к элементу массива, и с помощью функции push_back(x)?

Если что, переменные a, b и i являются переменными типа int и имеют значения не более 10

Источник
  •  59
  •  1
  • 14 янв 2018 2018-01-14 16:33:06
Вы что-то выдумываете. При таком объявлении v таких ошибок в ответ на ваш код быть не может. — 14 янв 20182018-01-14 17:29:53.000000
Вы точно уверены, что у вас не vector<int> v;? Ну не может быть таких ошибок с vector<vector<int>> v; 14 янв 20182018-01-14 17:16:18.000000

1 ответ

2
vector< vector<int> > v1(2 * a, vector<int>(2 * b));
v1[a][b] = i;

или

vector< vector<int> > v2;
for (int i = 0; i < 2 * a; ++i)
    v2.push_back(vector<int>(2*b));
v2[a][b] = i;

у вас вектор был пустой, потому вы не можете присвоить значение какому то элементу, а вектор нужно заполнять соответствующим типом элементов. В вашем случаи тип значения является вектором

Дополнение:

если a <= 10 и b <= 10, то можно использовать это условие:

vector< vector<int> > v1(11, vector<int>(11));
    v1[a][b] = i;  

vector< vector<int> > v2;
for (int i = 0; i < 11; ++i)
    v2.push_back(vector<int>(11));
v2[a][b] = i;
это к примеру: самое главное, чтобы вектор имел больше элементов, чем индекс, который вы собираетесь использовать. Можете брать a + 1 или 100 * a или любое другое число больше a — 14 янв 20182018-01-14 17:11:39.000000
А почему 2 * a и 2 * b ? — 14 янв 20182018-01-14 17:07:58.000000
и еще: не называйте вектор массивом... — 14 янв 20182018-01-14 17:07:21.000000