以下是实现优先级队列的程序。我正在使用向量来创建队列。对于这个程序,我希望能够使用模板添加任何类型的数据。所有代码都正确编译,直到我尝试通过添加到main函数来测试代码。有人能抓到这里出了什么问题吗?下面我还指出了给我错误的代码行(在main的底部)。没有它,程序运行正常。
PQ.h:
#ifndef PQ_H
#define PQ_H
#include <vector>
using namespace std;
template <typename T> struct vec//allows template vectors
{
std::vector<T> vec0;
std::vector<T> vec1;
std::vector<T> vec2;
std::vector<T> vec3;
std::vector<T> vec4;
std::vector<T> vec5;
std::vector<T> vec6;
std::vector<T> vec7;
std::vector<T> vec8;
std::vector<T> vec9;
};
template <class T>
void add(T item, int r);//adds to template queue
template<class T>
void remove();//removes from highest priority vector
template<class T>
bool empty();//check empty
template<class T>
bool empty(int r);//check if specific rank is empty
PQFunction.cpp
#include <iostream>
#include <vector>
#include "PQ.h"
using namespace std;
template <class T>
void add(T item, int r)
{
if (r==0)
{
vec0.push_back(item);
}
if (r==1)
{
vec1.push_back(item);
}
if (r==2)
{
vec2.push_back(item);
}
if (r==3)
{
vec3.push_back(item);
}
if (r==4)
{
vec4.push_back(item);
}
if (r==5)
{
vec5.push_back(item);
}
if (r==6)
{
vec6.push_back(item);
}
if (r==7)
{
vec7.push_back(item);
}
if (r==8)
{
vec8.push_back(item);
}
if (r==9)
{
vec9.push_back(item);
}
if (r > 9 || r < 0)
{
cout<<"Rank is invalid"<<endl;
}
}
template <class T>
void remove()
{
if (!empty())
{
if (!empty(0))
{
vec0.erase(vec0.begin);
}
else if(!empty(1))
{
vec1.erase(vec1.begin());
}
else if(!empty(2))
{
vec2.erase(vec2.begin());
}
else if(!empty(3))
{
vec3.erase(vec3.begin());
}
else if(!empty(4))
{
vec4.erase(vec4.begin());
}
else if(!empty(5))
{
vec5.erase(vec5.begin());
}
else if(!empty(6))
{
vec6.erase(vec6.begin());
}
else if(!empty(7))
{
vec7.erase(vec7.begin());
}
else if(!empty(8))
{
vec8.erase(vec8.begin());
}
else if(!empty(9))
{
vec9.erase(vec9.begin());
}
}
else
{
cout<<"Nothing to remove"<<endl;
}
}
template <class T>
bool empty()
{
if (
vec0.empty()&&
vec1.empty()&&
vec2.empty()&&
vec3.empty()&&
vec4.empty()&&
vec5.empty()&&
vec6.empty()&&
vec7.empty()&&
vec8.empty()&&
vec9.empty())
return true;
}
template <class T>
bool empty(int r)
{
if (r == 0)
{
return vec0.empty();
}
if (r==1)
{
return vec1.empty();
}
if (r==2)
{
return vec2.empty();
}
if (r==3)
{
return vec3.empty();
}
if (r==4)
{
return vec4.empty();
}
if (r==5)
{
return vec5.empty();
}
if (r==6)
{
return vec6.empty();
}
if (r==7)
{
return vec7.empty();
}
if (r==8)
{
return vec8.empty();
}
if(r==9)
{
return.vec9.empty();
}
}
PQueue.cpp
#include <iostream>
#include <cstdlib>
#include <vector>
#include "PQ.h"
using namespace std;
int main()
{
**add(1,0);//this single line of code gives me the lnk error but when removed, the program compiles fine**
return(0);
}