簡體   English   中英

C ++中的向量初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM