Можно ли использовать push_back () для ввода элементов в двумерный вектор? - PullRequest
0 голосов
/ 17 июня 2020

Я изучал векторы и хотел создать вектор векторов с помощью пользовательского ввода. Хотя я нашел способ сделать это, мне интересно, можно ли использовать push_back() для ввода значений в вектор.

Согласно коду: vec[i][j] = ele; работает успешно, но vec[i][j].push_back(ele); не работает .

Я не могу понять, почему это происходит?

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, q;
    cin >> n >> q;
    vector<vector <int>> vec(n);

    for(int i=0; i<n; i++) {
        int k;
        cin >> k;
        vec[i] = vector<int> (k);
        for(int j=0; j<k; j++) {
            int ele;
            cin >> ele;

            // =====================================================

            vec[i][j] = ele;  // Why does this work

            //vec[i][j].push_back(ele); // but this doesn't?

            // =====================================================
        }
    }

    int a, b;
    for(int i=0; i<q; i++) {
        cin >> a >> b;
        cout << vec[a][b] << endl;
    }

    return 0;
}

Ответы [ 3 ]

3 голосов
/ 17 июня 2020

Поскольку у вас есть вектор векторов целых чисел, это означает, что выражение vec[i][j] вернет ссылку на целое число (потому что vec[i] - это i-й вектор, а vec[i][j] - j-е целое число в i-м векторе. ), потому что нет ошибки с выражением назначения (vec[i][j] = ele;), так как вы присваиваете новое значение j-му элементу i-го вектора. Итак, если вы хотите добавить новый элемент в i-й вектор, вам нужно позвонить vec[i].push_back(ele)

2 голосов
/ 18 июня 2020

Подобно тому, как вы хотите .pushback() в 1D-векторе, вы бы сделали только vec.pushback(ele) вместо vec[i].pushback(ele)

Когда вы делаете vec[i][j].pushback(ele), вы фактически добавляете элемент в 3-е измерение .

Итак, в вашем случае вы захотите vec[i].pushback(ele)

1 голос
/ 18 июня 2020

vec - вектор векторов целых чисел. Таким образом, вызывая vec[i], он вернет i-й индексный вектор. Затем вызов vec[i][j] вернет j-е целое число индекса в векторе vec[i]. Вы используете метод push_back() для векторов, чтобы добавлять значения в их конец. Таким образом, вызывая vec[i][j].push_back(), вы пытаетесь использовать метод push_back() для целого числа, что не имеет смысла.

...