使用向量创建模板优先级队列

时间:2014-04-13 09:09:32

标签: templates vector queue priority-queue lnk2019

以下是实现优先级队列的程序。我正在使用向量来创建队列。对于这个程序,我希望能够使用模板添加任何类型的数据。所有代码都正确编译,直到我尝试通过添加到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

ENDIF


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);
}

0 个答案:

没有答案