我正在尝试声明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;
答案 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>>
。