<STL初探>list节点为自定义类型,如何访问节点中变量和函数,如何使用list自带的排序

#include <iostream>
#include <iomanip>
#include <list>
#include <iterator>
#include <algorithm>

using namespace std;

template <typename T>
void showLink( const list<T> &mLink);

template <typename T>
T getArea( list<T> &myLink);

#define INTERVAL  50    //间隔50米
#define PRECISION 8     //小数位数

//自定义类型作为节点
class Node
{
public:
    double  Area;        //记录该速度链表的所求出的时间面积,单位未定
    int     Num;         //序列号
    list<double> Link;
    Node(const int num)
    {
        double data=-1;
        Num = num;
        cout<<"H"<<Num<<"测量速度:";
        while(data!=0)
        {
            cin>>data;
            if(data!=0)
                Link.push_back(data);
        }
        Area = getArea(Link);
    }
    double getArea(list<double> & myLink )
    {
        double Area;
        list<double>::iterator p = myLink.begin();
        Area = double( 1/(*myLink.begin()) ) - double( 1/( *(--myLink.end()) ) );//--myLink.end()才是最后一个节点
        for( p++; p!=myLink.end(); p++ )
        {
            Area += ( 1/(*p) )*2;
        }
        return Area*INTERVAL/2; //间隔50米
    }
    void showLink( /*const list<double> &myLink*/)
    {
        if(Link.empty())
        {
            cout<<"List is empty"<<endl;
        }
        else
        {
            ostream_iterator<double> output( cout , " ");
            copy( Link.begin() , Link.end() , output );
        }
    }
    bool operator<(const Node & other)
    {
        if(Area < other.Area)
            return true;
        else
            return false;
    }
};

int main()
{
    std::list<Node>  LinkList;   //注意这里的写法
    std::list<Node>::iterator it;

    int Number=-1,i=0;
    cout<<"请输入路径条数:";
    cin>>Number;
    while(++i <= Number)
    {
        Node node(i);
        LinkList.push_back(node);
    }
    LinkList.sort();    //节点为自定义时,要同时重载<运算符,才能使用sort()
    for( it = LinkList.begin(); it != LinkList.end(); it++ )
    {
        cout<<"H"<<it->Num<<"耗时为";
        cout.setf(ios::fixed);
        cout<<setprecision(PRECISION)<<it->Area<<" s,\t测量速度为:";//it->Area 就是 访问节点Node中的Area变量
        cout.unsetf(ios::fixed);
        it->showLink();  //访问自定义类型的节点中的成员函数
        cout<<endl;
    }
    return 0;
}

这是我昨天帮人写的一个小程序,不想天天重写链表之类的,希望用STL的数据结构直接实现需要的功能;

遇到了如标题所述的问题,特此记下。如果能给遇到同样疑问的初学者,提供一点思路,就再好不够了~ 欢迎提出各种意见~


数据结构就是链表,用std::list表示;链表节点为Node,其中成员包括Area,Num以及又一个链表,也用std::list表示。

以下为数据结构的示意图:





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值