[英]vector initialization in c++
有人可以向我解釋為什么Graph構造函數中的verticies.size()等於“ 4”,但是在addEdge verticies.size()中再次調用時等於0? 程序在頂點[fromVertex] .addEdge(toVertex)崩潰,因為頂點的大小為0。
我確定這是我應該知道的東西,但是我沒有錯。
class Vertex {
public:
int value;
vector<int> adj;
bool isVisited = false;
Vertex(int _value)
{
value = _value;
}
void addEdge(int destination)
{
adj.push_back(destination);
}
};
class Graph
{
public:
int vertexCount; // No. of vertices
vector<Vertex> verticies;
Graph(int _vertexCount)
{
this->vertexCount = _vertexCount;
vector<Vertex> verticies;
for (size_t i = 0; i < _vertexCount; i++)
{
Vertex v = Vertex(i);
verticies.push_back(v);
}
cout << "verticies count " << verticies.size() << endl;
}
void addEdge(int fromVertex, int toVertex)
{
cout << "verticies count in addEdge: " << verticies.size() << endl;
verticies[fromVertex].addEdge(toVertex);
}
void findPath(int fromVertex, int toVertex, vector<int> pathSoFar)
{
pathSoFar.push_back(fromVertex);
if (fromVertex == toVertex)
{
for (int i = 0; i < pathSoFar.size(); i++)
{
cout << pathSoFar.at(i) << " ";
}
cout << endl;
return;
}
else
{
for (size_t i = 0; i < verticies[fromVertex].adj.size(); i++)
{
int nextToVisit = verticies[fromVertex].adj.at(i);
if (verticies[nextToVisit].isVisited == false)
{
findPath(nextToVisit, toVertex, pathSoFar);
}
}
}
}
};
int main()
{
// Create a graph given in the above diagram
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
vector<int> path;
g.findPath(2, 1, path);
return 0;
}
有人可以向我解釋為什么Graph構造函數中的verticies.size()等於“ 4”,但是在addEdge verticies.size()中再次調用時等於0?
這是因為這些是兩個不同的對象。 這里
Graph(int _vertexCount)
{
this->vertexCount = _vertexCount;
vector<Vertex> verticies;
// ....
}
您正在創建稱為verticies
的局部矢量,該矢量verticies
了成員變量。 只需刪除該行就可以了。 我的意思是,您已經聲明了該成員,無需重復兩次;)。
此外,我建議您在填充數據之前調整向量的大小,或者至少保留所需的容量。
在這里,您正在遮蓋您的課程字段:
Graph(int _vertexCount)
{
this->vertexCount = _vertexCount;
vector<Vertex> verticies; // <--- exactly here
for (size_t i = 0; i < _vertexCount; i++)
{
Vertex v = Vertex(i);
verticies.push_back(v);
}
cout << "verticies count " << verticies.size() << endl;
}
和你正在做的所有操作的地方(在構造函數中的上下文中) verticies
,而不是Graph::verticies
。 順便說一句,正確的英語復數形式是vertices
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.