beyond0702 发表于 2008-6-13 19:56

我想用 连表 来存储(动态) 所有学生的信息《》

我想用 连表 来存储(动态) 所有学生的信息
把它定义成 静态成员,怎么初始 化呢?

或是有其他方法可以代替。。

typdef struct snode
{
  long number;
  sting name;
  double Engscore;
  double Mathscore;

}Slink;

class TStuden
{
  private:
       static: Slink *head ;   //怎么初始化这里的静态成员呢???.
public:
     //**********

};

zjl138 发表于 2008-6-14 00:18

初始化静态结构成员还有再定义一下吧.比如你这个例子:
这样初始化就可以的:Slink* Tstuden::head = .....

你的typedef string 都拼写错误,呵呵..

zjl138 发表于 2008-6-14 00:19

忘了说,要在类外初始化.

中学者 发表于 2008-6-14 00:47

你可以选择用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]

beyond0702 发表于 2008-6-16 02:29

谢谢各位!我已经搞出来了;不过我想性能不太好;
  stl ,我还没怎么用过
我想问的是以后真正搞项目的时候,是不是都用 stl ,或是大部分用它,这样自己可以少写很多的代码,不自己定义那么多数据结构。但同时我想用它所引来的开销问题。。。。是不是真的能节省呢?

中学者 发表于 2008-6-16 13:13

STL效率不见得高,但是却是很健壮的,异常安全性很好....另外,在真正搞项目时直接用STL可以缩短时间(我这么人为)..你可以从STL派生出你需要的数据结构....

页: [1]

编程论坛