如何访问使用固定大小定义的向量?

问题描述 投票:0回答:1

这是从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

有人可以向我解释这是怎么回事?谢谢

c++ vector
1个回答
0
投票

首先,我同意你的问题的所有评论,关于格式化,调试,宏等。但我会尝试向你解释作为初学者在代码中发生的事情。

这是你如何定义int的向量:

vector<int> v;

这将定义一个由10个int向量组成的数组:

vector<int> v[10];

这就是你的程序正在做的事情:它定义了一个包含10个向量的数组。

使用以下方法访问数据时:

v[n][i]

发生的事情是你在数组中取第n个向量,并在该向量中得到第i个元素。

当你这样做:

v[a].PB(b);

你正在数组中取第a个向量,并将数字b作为该向量中的新元素添加到它的末尾。

之后,您只需要仔细遵循代码的逻辑。我建议使用调试器逐步执行代码并在执行此操作时检查变量的值。

但基本上,用户输入的值然后程序以复杂的方式添加到向量中(没有保护用户输入超出范围的值 - 非常危险)。然后程序打印出前5个向量的所有值。

© www.soinside.com 2019 - 2024. All rights reserved.