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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何访问使用固定大小定义的向量?相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

vector<int> v;

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

vector<int> v[10];

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

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

v[n][i]

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

当你这样做:

v[a].PB(b);

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

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

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

以上是关于如何访问使用固定大小定义的向量?的主要内容,如果未能解决你的问题,请参考以下文章

固定大小的 3D 表

固定大小的 std::vector

C++:固定但运行时定义长度数组的向量

使用 boost assign 初始化具有固定大小的向量的向量

如何使用大小和值构造函数使用成员初始化器列表初始化用户定义对象的向量

引用向量的部分片段?