Как получить доступ к вектору с фиксированным размером? - PullRequest
0 голосов
/ 20 марта 2019

Вот часть кода, извлеченная из файла cpp.Я не могу понять / отслеживать, как работает этот код.Вектор здесь определен с фиксированным размером, и при доступе к нему для доступа к двумерному массиву используются две квадратные скобки.

#include <iostream>
#include<vector> 
#include<stdio.h>
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define REP(i,n) FOR(i,0,n)
#define PB push_back
using namespace std;

int main()
{
vector<int> v[10];
int a,b;
REP(i,5)
    {
        scanf("%d%d",&a,&b);

        a--;
        b--;
        v[a].PB(b);
        v[b].PB(a);
    }

    for(int n=0;n<5;n++){
    REP(i,v[n].size())
    {
        cout<<v[n][i]<<" ";
    }
    cout<<endl;
    }
return 0;
}

В приведенной выше программе, если я приведу следующие данные: (подчеркиваниепросто для различения отдельных входов)

4 5
2 3
6 8
1 2
8 6

Я получаю следующие выводы:

1
2 0
1
4
3

Может кто-нибудь объяснить мне, как это происходит?Спасибо

1 Ответ

0 голосов
/ 20 марта 2019

Во-первых, я согласен со всеми комментариями к вашему вопросу о форматировании, отладке, макросах и т. Д. Но я постараюсь объяснить вам, как новичку, что происходит в коде.

ЭтоВот как вы бы определили вектор типа int:

vector<int> v;

Это определит массив из 10 векторов типа int:

vector<int> v[10];

Это то, что делает ваша программа: она определяет массив, который содержит 10 векторов.

При доступе к данным это:

v[n][i]

То, что происходит, это то, что вы беретеn-й вектор в массиве и получение i-го элемента в этом векторе.

Когда вы делаете это:

v[a].PB(b);

вы берете а-й вектор в массивеи добавление числа b в конец его как нового элемента в этом векторе.

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

Но в основном пользователь вводит значения, которые программа затем добавляет к векторам сложным образом (без защиты пользователя, вводящего значения вне диапазона - очень опасно).Затем программа распечатывает все значения первых 5 векторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...