列表类型的向量

时间:2015-11-07 16:23:17

标签: c++ vector linked-list

我正在尝试声明List类型的向量。我已经搜索过并从我能找到的内容中搜集并收集,我相信这个声明vector <List<int>> adj是正确的。但VS给我一个错误,“List”可能没有模板参数列表。

Graph.H

#ifndef GRAPH_H_
#define GRAPH_H_

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <vector>
#include "List.h"

class Graph {

public:
    Graph(int n);
    //Initializes an empty graph to have n vertices

    ~Graph();

    int getNumEdges();

    int getNumVertices();

    void addEdge(int u, int v);

    void printGraph();

private:

    int vertices, edges;

    vector<List<int>> adj; <---The Issue I am having
};
#endif

List.h

class List
{
private:
    struct Node
    {
        int data;
        Node* next;

        Node() : next(NULL){} //define our own default constructor
        Node(int data) : next(NULL), data(data){}
    };

    typedef struct Node* NodeRef;

    NodeRef head;
    NodeRef tail;
    NodeRef iterator; //points to one node at a time
    int size;

2 个答案:

答案 0 :(得分:1)

我猜你的意图是实现int类型的邻接矩阵。在这种情况下,您不应该使用List,而应使用std::list。如果这是你想要的,这些是必要的变化:

#include <list>
...
std::vector<std::list<int>> adj; 

答案 1 :(得分:0)

  

但是VS给了我一个错误&#34; List&#34;可能没有模板   参数列表。

C ++中的一些错误消息可能难以破译,但这个问题出在哪里呢? List不是模板。它可能没有模板参数列表:

class List
{
// ...
};

当然,您可以将List设为模板:

template <class T>
class List
{
private:
    struct Node
    {
        T data;
        Node* next;

        Node() : next(NULL){} //define our own default constructor
        Node(T const& data) : next(NULL), data(data){}
    };

    typedef struct Node* NodeRef;

    NodeRef head;
    NodeRef tail;
    NodeRef iterator; //points to one node at a time
    int size;
};

但你为什么要那样做?只需使用std::list即可完成。

换句话说,在C ++中表达&#34;列表类型向量的最自然的方式&#34;是std::vector<std::list<int>>