如何使用对象矢量向量?

时间:2014-04-17 13:09:51

标签: c++ vector

我正在尝试实现无向图,我在创建工作邻接列表时遇到了一些问题。

代码:

typedef int destination_t;
typedef int weight_t;

const weight_t weight_max=std::numeric_limits<int>::infinity();

class Neighbor
{
public:
    destination_t dest;
    weight_t weight;


    Neighbor(dest_t arg_dest, weight_t arg_weight){
    this->dest=arg_dest;
    this->weight=arg_weight;
    }
};

图表:

typedef std::vector<std::vector<Neighbor>> AdjList_t;

class Graph
{
public:
    AdjList_t* AdjList;
    int noOfVertices;

    Graph(int V){
        AdjList=new AdjList_t(V);
        this->noOfVertices=V;   
    }
};

然后在主要:

Graph G(2);
G.AdjList[0].push_back(Neighbor(1,3));

不会编译。

void std::vector<_Ty>::push_back(std::vector<Neighbor> &&)' : cannot convert parameter 1 from 'Neighbor' to 'std::vector<_Ty> &&'

我感觉就像在这里

AdjList=new AdjList_t(V);

我正在创建多个AdjList_t对象,但我只想设置这个容器的大小,就像我可以做的那样:

AdjList_t List(2);

但我想在构造函数中设置大小,而不是在main函数中。 这个问题的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:2)

AdjList是一个指针。您需要先取消引用它:

(*G.AdjList)[0].push_back(Neighbor(1,3));

但是你也在泄漏内存并且不需要指针,所以我建议改为删除它:

typedef std::vector<std::vector<Neighbor>> AdjList_t;

class Graph
{
public:
    AdjList_t AdjList;
    int noOfVertices;

    Graph(int V) :
        AdjList(V), // This is how you call the constructor of a member
        noOfVertices(V)
    {
    }
};

int main()
{
    Graph G(2);
    G.AdjList[0].push_back(Neighbor(1,3));
    return 0;
}