【发布时间】:2020-05-26 17:48:47
【问题描述】:
我是一名尝试提高 C++ 能力的 Python 程序员。我有一个关于向量的愚蠢问题。
假设我有一个像这样的向量
vector<int> adj;
假设它包含一些值。这个操作是做什么的?
adj[v].push_back(w)
它会创建向量的向量吗?它与拥有一个,有什么不同
vector<vector<int>> adj
开始?
编辑:: 相关代码是一个简单的 BFS on graph,可以完美编译和运行。
class Graph
{
int V;
vector<int> *adj;
public:
Graph(int V);
void addEdge(int v, int w);
void BFS(int s);
};
Graph::Graph(int V)
{
this->V = V;
adj = new vector<int>[V];
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w); // Add w to v’s list.
}
BFS函数在GeeksForGeeks
【问题讨论】:
-
那甚至不应该编译。
-
adj[v]返回一个int(假设v < adj.size()),但C++ 中的int不是结构或类,因此它不能用点调用任何字段或方法...所以它不会像上面评论中提到的那样编译。 -
在代码示例中,
adj是指向list的指针。执行adj[v]是告诉编译器adj实际上指向一个数组,我想要该数组中的vth 列表,然后将w添加到该列表中。当然,这里只有 1 个列表,所以v的任何值不是 0 都是错误的。但是,此代码示例并不代表您提出的问题。你会问vector<int> * adj;而不是vector<int> adj;。 -
请不要以使现有答案无效的方式编辑问题。而是提出一个不同的新问题。并且下次一定要发Minimal Reproducible Example,这样你问的问题就和你以为你问的一样。