我想用 连表 来存储(动态) 所有学生的信息《》
我想用 连表 来存储(动态) 所有学生的信息把它定义成 静态成员,怎么初始 化呢?
或是有其他方法可以代替。。
typdef struct snode
{
long number;
sting name;
double Engscore;
double Mathscore;
}Slink;
class TStuden
{
private:
static: Slink *head ; //怎么初始化这里的静态成员呢???.
public:
//**********
};
这样初始化就可以的:Slink* Tstuden::head = .....
你的typedef string 都拼写错误,呵呵.. 忘了说,要在类外初始化. 你可以选择用STL....下面是我写的一个双链表,功能不多....
[quote][font=新宋体][size=1.5][color=#008000]/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http://yzfy.org **
*****************************************************************/
[/color][color=#FF0000]#ifndef [/color][color=#800080]DATASTRUCT_H_
[/color][color=#FF0000]#define [/color][color=#800080]DATASTRUCT_H_
[/color][color=#FF0000]#include<cassert>
[/color][color=#FF0000]#include<iostream>
[/color][color=#0000FF]template[/color]<typename _Ty>
[color=#0000FF]struct [/color]node
[color=#800000]{
[/color][color=#0000FF]public[/color]:
_Ty value_;
node* next_,*pre_;
[color=#008080]node[/color]([color=#0000FF]const [/color]_Ty& value): [color=#008080]value_[/color](value)
[color=#800000]{
[/color]pre_ = next_ =[color=#800080]0[/color];
[color=#800000]}
[/color]~[color=#008080]node[/color]()[color=#800000]{ [/color][color=#FF0000]std[/color]::[color=#FF0000]cout[/color]<<[color=#FF00FF]"destory..."[/color]<<[color=#FF0000]std[/color]::[color=#FF0000]endl[/color];[color=#800000]}
} [/color];
[color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node=node<_Ty> >
[color=#0000FF]class [/color]DList
[color=#800000]{
[/color][color=#0000FF]typedef [/color]_Node* pointer;
[color=#0000FF]typedef [/color]_Node [color=#0000FF]const[/color]* const_pointer;
[color=#0000FF]typedef [/color]_Node& reference;
[color=#0000FF]typedef [/color]_Node& const_reference;
[color=#0000FF]public[/color]:
[color=#008080]DList[/color]();
[color=#008080]DList[/color]([color=#0000FF]const [/color]DList<_Ty,_Node>& source);
DList<_Ty,_Node>& [color=#0000FF]operator[/color]=([color=#0000FF]const [/color]DList<_Ty,_Node>& source);
~[color=#008080]DList[/color]();
[color=#0000FF]bool [/color][color=#008080]empty[/color]() [color=#0000FF]const [/color][color=#800000]{ [/color][color=#0000FF]return [/color](head_==[color=#800080]0[/color]); [color=#800000]}
[/color][color=#0000FF]int [/color][color=#FF8000]size[/color]() [color=#0000FF]const [/color][color=#800000]{ [/color][color=#0000FF]return [/color]size_; [color=#800000]}
[/color]pointer [color=#FF8000]begin[/color]() [color=#0000FF]const [/color][color=#800000]{ [/color][color=#0000FF]return [/color]head_; [color=#800000]}
[/color]pointer [color=#FF8000]end[/color]() [color=#0000FF]const [/color][color=#800000]{ [/color][color=#0000FF]return [/color][color=#800080]0[/color]; [color=#800000]}
[/color][color=#0000FF]void [/color][color=#008080]push_front[/color]([color=#0000FF]const [/color]_Ty& value);
[color=#0000FF]void [/color][color=#FF8000]push_back[/color]([color=#0000FF]const [/color]_Ty& value);
_Ty [color=#008080]front[/color]() [color=#0000FF]const[/color];
_Ty [color=#008080]back[/color]() [color=#0000FF]const[/color];
[color=#0000FF]void [/color][color=#008080]pop_front[/color]();
[color=#0000FF]void [/color][color=#FF8000]pop_back[/color]();
[color=#0000FF]void [/color][color=#008080]Insert[/color]([color=#0000FF]const [/color]_Ty& value,pointer where_);
[color=#0000FF]void [/color][color=#008080]Delete[/color](pointer where_);
pointer [color=#008080]Find[/color]([color=#0000FF]int [/color]pos) [color=#0000FF]const[/color];
[color=#0000FF]void [/color][color=#008080]reverse[/color]() ;
[color=#0000FF]void [/color][color=#008080]print[/color]() [color=#0000FF]const
[/color][color=#800000]{
[/color][color=#0000FF]for[/color](pointer it=head_;it!=[color=#800080]0[/color];it=it->next_ )
[color=#FF0000]std[/color]::[color=#FF0000]cout[/color]<<it->value_<<[color=#FF00FF]" "[/color];
[color=#FF0000]std[/color]::[color=#FF0000]cout[/color]<<[color=#FF0000]std[/color]::[color=#FF0000]endl[/color];
[color=#800000]}
[/color][color=#0000FF]private[/color]:
pointer [color=#008080]allocated[/color]() [color=#0000FF]const
[/color][color=#800000]{
[/color][color=#0000FF]return [/color]static_cast<pointer>(::[color=#0000FF]operator new[/color]([color=#0000FF]sizeof[/color](_Node)));
[color=#800000]}
[/color][color=#0000FF]void [/color][color=#008080]append[/color](pointer where_,[color=#0000FF]const [/color]_Ty& value) [color=#0000FF]const
[/color][color=#800000]{
[/color][color=#0000FF]new [/color](where_)[color=#008080]_Node[/color](value);
[color=#800000]}
[/color][color=#0000FF]void [/color][color=#008080]destroy[/color](pointer where_) [color=#0000FF]const
[/color][color=#800000]{
[/color]where_->~[color=#008080]_Node[/color]();
::[color=#0000FF]operator delete[/color](where_);
[color=#800000]}
[/color]pointer [color=#008080]link[/color](pointer where_pre,pointer where_,pointer where_suc)
[color=#800000]{
[/color]where_->pre_ = where_pre;
where_->next_ = where_suc;
[color=#0000FF]if[/color]( where_pre ) where_pre->next_ = where_;
[color=#0000FF]if[/color]( where_suc ) where_suc->pre_ = where_;
[color=#0000FF]return [/color]where_;
[color=#800000]}
[/color][color=#0000FF]void [/color][color=#008080]Swap[/color](DList<_Ty,_Node>& source)
[color=#800000]{
[/color][color=#FF0000]std[/color]::[color=#FF8000]swap[/color](head_,source.head_);
[color=#FF0000]std[/color]::[color=#FF8000]swap[/color](size_,source.size_);
[color=#800000]}
[/color][color=#0000FF]private[/color]:
pointer head_;
[color=#0000FF]int [/color]size_;
[color=#800000]}[/color];
[color=#008000]// 具体实现
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node >
DList<_Ty,_Node>::[color=#008080]DList[/color]():[color=#008080]head_[/color]([color=#800080]0[/color]),[color=#008080]size_[/color]([color=#800080]0[/color])
[color=#800000]{}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node >
DList<_Ty,_Node>::~[color=#008080]DList[/color]()
[color=#800000]{
[/color][color=#0000FF]for[/color](pointer begin_=head_,current;begin_!=[color=#FF8000]end[/color]();)
[color=#800000]{
[/color]current=begin_;
begin_=begin_->next_;
[color=#008080]destroy[/color](current);
[color=#800000]}
[/color][color=#FF0000]std[/color]::[color=#FF0000]cout[/color]<<[color=#FF00FF]"this is ....."[/color]<<[color=#FF0000]std[/color]::[color=#FF0000]endl[/color];
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node >
DList<_Ty,_Node>::[color=#008080]DList[/color]([color=#0000FF]const [/color]DList<_Ty,_Node>& source):[color=#008080]head_[/color]([color=#800080]0[/color]),[color=#008080]size_[/color]([color=#800080]0[/color])
[color=#800000]{
[/color]typename DList<_Ty,_Node>::pointer begin_=source.[color=#FF8000]begin[/color]();
DList<_Ty,_Node> temp;
[color=#0000FF]for[/color](;begin_!=source.[color=#FF8000]end[/color]();begin_=begin_->next_)
[color=#800000]{
[/color]temp.[color=#FF8000]push_back[/color](begin_->value_);
[color=#800000]}
[/color][color=#008080]Swap[/color](temp);
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
DList<_Ty,_Node>& DList<_Ty,_Node>::[color=#0000FF]operator[/color]= ([color=#0000FF]const [/color]DList<_Ty,_Node>& source)
[color=#800000]{
[/color]DList<_Ty,_Node> [color=#008080]temp[/color](source);
[color=#008080]Swap[/color](temp);
[color=#0000FF]return [/color]*[color=#0000FF]this[/color];
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node >
[color=#0000FF]void [/color]DList<_Ty,_Node>::[color=#008080]push_front[/color]([color=#0000FF]const [/color]_Ty& value)
[color=#800000]{
[/color]typename DList<_Ty,_Node>::pointer node_=[color=#008080]allocated[/color]();
[color=#008080]append[/color](node_,value);
head_=[color=#008080]link[/color]([color=#800080]0[/color],node_,head_);
++size_;
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node >
[color=#0000FF]void [/color]DList<_Ty,_Node>::[color=#FF8000]push_back[/color]([color=#0000FF]const [/color]_Ty& value)
[color=#800000]{
[/color]typename DList<_Ty,_Node>::pointer node_=[color=#008080]allocated[/color]();
[color=#008080]append[/color](node_,value);
typename DList<_Ty,_Node>::pointer end_=[color=#008080]Find[/color](size_);
[color=#0000FF]if[/color]( head_==[color=#800080]0 [/color]) head_=node_;
[color=#0000FF]else [/color][color=#008080]link[/color](end_->pre_,end_,node_);
++size_;
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
[color=#0000FF]inline [/color]_Ty DList<_Ty,_Node>::[color=#008080]front[/color]() [color=#0000FF]const
[/color][color=#800000]{
[/color][color=#0000FF]return [/color]head_->value_;
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
[color=#0000FF]inline [/color]_Ty DList<_Ty,_Node>::[color=#008080]back[/color]() [color=#0000FF]const
[/color][color=#800000]{
[/color]typename DList<_Ty,_Node>::pointer node_=[color=#008080]Find[/color](size_);
[color=#0000FF]return [/color]node_->value_;
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
[color=#0000FF]void [/color]DList<_Ty,_Node>::[color=#FF8000]pop_back[/color]()
[color=#800000]{
[/color]typename DList<_Ty,_Node>::pointer node_p=[color=#008080]Find[/color](size_-[color=#800080]1[/color]);
typename DList<_Ty,_Node>::pointer node_s=[color=#008080]Find[/color](size_);
[color=#008080]link[/color](node_p->pre_,node_p,[color=#800080]0[/color]);
[color=#008080]destroy[/color](node_s);
head_=--size_?head_:[color=#800080]0[/color];
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
[color=#0000FF]void [/color]DList<_Ty,_Node>::[color=#008080]pop_front[/color]()
[color=#800000]{
[/color]typename DList<_Ty,_Node>::pointer node_=head_;
head_=[color=#008080]link[/color]([color=#800080]0[/color],head_->next_,head_->next_->next_);
[color=#008080]destroy[/color](node_);
head_=--size_?head_:[color=#800080]0[/color];
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
[color=#0000FF]void [/color]DList<_Ty,_Node>::[color=#008080]Insert[/color]([color=#0000FF]const [/color]_Ty& value,typename DList<_Ty,_Node>::pointer where_)
[color=#800000]{
[/color]typename DList<_Ty,_Node>::pointer node_=[color=#008080]allocated[/color]();
[color=#008080]append[/color](node_,value);
[color=#0000FF]if[/color]( where_==head_ ) head_=[color=#008080]link[/color](where_->pre_,node_,where_);
[color=#0000FF]else [/color][color=#008080]link[/color](where_->pre_,node_,where_);
++size_;
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
[color=#0000FF]void [/color]DList<_Ty,_Node>::[color=#008080]Delete[/color](typename DList<_Ty,_Node>::pointer where_)
[color=#800000]{
[/color][color=#0000FF]if[/color]( where_==head_ ) head_=[color=#008080]link[/color]([color=#800080]0[/color],head_->next_,head_->next_->next_);
[color=#0000FF]else [/color][color=#008080]link[/color](where_->pre_->pre_,where_->pre_,where_->next_);
[color=#008080]destroy[/color](where_);
--size_;
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
typename DList<_Ty,_Node>::pointer DList<_Ty,_Node>::[color=#008080]Find[/color]([color=#0000FF]int [/color]pos) [color=#0000FF]const
[/color][color=#800000]{
[/color][color=#008080]assert[/color](pos>=[color=#800080]0[/color]&&pos<=size_);
typename DList<_Ty,_Node>::pointer node_=head_;
[color=#0000FF]for[/color](;pos>[color=#800080]1[/color];--pos) node_=node_->next_;
[color=#0000FF]return [/color]node_;
[color=#800000]}
[/color][color=#0000FF]template[/color]<typename _Ty,[color=#0000FF]class [/color]_Node>
[color=#0000FF]void [/color]DList<_Ty,_Node>::[color=#008080]reverse[/color]()
[color=#800000]{
[/color]typename DList<_Ty,_Node>::pointer end_=[color=#008080]Find[/color](size_);
[color=#0000FF]for[/color](typename DList<_Ty,_Node>::pointer x_pre=[color=#800080]0[/color],x=end_;end_!=[color=#800080]0[/color];)
[color=#800000]{
[/color]end_=end_->pre_;
x_pre=[color=#008080]link[/color](x_pre,x,[color=#800080]0[/color]);
x=end_;
[color=#0000FF]if[/color](x_pre->pre_==[color=#800080]0[/color]) head_=x_pre;
[color=#800000]}
}
[/color][color=#FF0000]#endif[/color][/size][/font][/quote] 谢谢各位!我已经搞出来了;不过我想性能不太好;
stl ,我还没怎么用过
我想问的是以后真正搞项目的时候,是不是都用 stl ,或是大部分用它,这样自己可以少写很多的代码,不自己定义那么多数据结构。但同时我想用它所引来的开销问题。。。。是不是真的能节省呢? STL效率不见得高,但是却是很健壮的,异常安全性很好....另外,在真正搞项目时直接用STL可以缩短时间(我这么人为)..你可以从STL派生出你需要的数据结构....
页:
[1]
