The Fourth Dimension Space

枯叶北风寒,忽然年以残,念往昔,语默心酸。二十光阴无一物,韶光贱,寐难安; 不畏形影单,道途阻且慢,哪曲折,如渡飞湍。斩浪劈波酬壮志,同把酒,共言欢! -如梦令

ACM模板之—循环队列(模板类)

//BEGIN_TEMPLATE_BY_ABILITYTAO_ACM
#include<cassert>
#include
<iostream>
#include
<cmath>
#include
<algorithm>
using namespace std;

template
<class T>
class Queue
{
private:
    
int front,rear;
    T 
*element;
    
int maxsize;
public:
    Queue(
int n=10000);
    
~Queue(){delete []element;}
    
void push_back(T item);
    T pop_front();
    T get_front();
    
void clear(){front=rear=0;}
    
bool isempty(){return front==rear;}
    
bool isfull(){return (rear+1)%maxsize==front;}
    
int lenth(){return (rear-front+maxsize)%maxsize;}
}
;


template
<class T>
Queue
<T>::Queue(int n=10000)
{
    front
=0;
    rear
=0;
    maxsize
=n;
    element
=new T[maxsize];
}


template
<class T>
void Queue<T>::push_back( T item)
{

    assert(
!isfull());
    rear
=(rear+1)%maxsize;
    element[rear]
=item;
}


template
<class T>
T Queue
<T>::pop_front()
{
    assert(
!isempty());
    front
=(front+1)%maxsize;
    
return element[front];
}


template
<class T>
T Queue
<T>::get_front()
{

    assert(
!isempty());
    
return element[(front+1)%maxsize];
}

//END_TEMPLATE_BY_ABILITYTAO_ACM






/////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    Queue
<int> test(10);
    
int n;
    
int i;
    
for( i=1;i<=9;i++)
        test.push_back(i);
    n
=test.get_front();
    n
=test.lenth();
    test.clear();
    n
=test.lenth();
    
return 0;
}

虽然这个模板已经通过简单测试,不过我还是有几问题不太明白,希望大家能帮我解释一下:
这个队列中的数组写成动态形式是一个不错的想法,但是调试的时候比较麻烦,因为debug时在test.element下面看不到任何数组元素。不知道该怎么解决?

posted on 2009-04-02 20:57 abilitytao 阅读(1681) 评论(8)  编辑 收藏 引用

评论

# re: ACM模板之—循环队列(模板类) 2009-04-03 10:53

看内存窗口  回复  更多评论   

# re: ACM模板之—循环队列(模板类) 2009-04-03 11:31 abilitytao

@水
内存里是16进制数 不知道有没有更方便点的方法?  回复  更多评论   

# re: ACM模板之—循环队列(模板类) 2009-04-03 11:55 OwnWaterloo

T arr[sz];

watch中写arr。 watch会将arr认为是数组, 并且可以让你展开,查看特定元素。


T* p;
watch中写 p。 watch会将p认为是指针, 只能展开1项, 查看其值。
watch中写 p,n。 watch将认为p是一个数组的首地址, 并为你展开前n项。


  回复  更多评论   

# re: ACM模板之—循环队列(模板类) 2009-04-03 11:58 OwnWaterloo

简单的说, 假设你想查看前1212个元素,应该写 :
test.element, 1212。

  回复  更多评论   

# re: ACM模板之—循环队列(模板类) 2009-04-03 12:09 abilitytao

@OwnWaterloo
这个问题我好长时间都弄不明白呢 感谢LS的精彩回答
顺便再问个小问题:如果说我想展开一个数组第100-200项,应该怎么做呢?
我刚才试了试 test.element,100,200貌似不行。  回复  更多评论   

# re: ACM模板之—循环队列(模板类) 2009-04-03 18:43 OwnWaterloo

指针算术  回复  更多评论   

# re: ACM模板之—循环队列(模板类) 2009-04-05 11:17 Chuck

@abilitytao
OWL的意思应该是~
test.element+100,100
  回复  更多评论   

# re: ACM模板之—循环队列(模板类) 2009-04-05 11:18 Chuck

@OwnWaterloo
呵呵~ 居然进同一篇日志~  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理