~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这一篇因为游戏设计而写的,里面采用了STL,先借用一下,过段时间专项研究。

模板

模板就是一种通用化的类,同一种模板可以创建无数种具有共同特征的容器类型。首先需要指定基础类型,比如int ,char,或者自定义的类型。
比如声明链表类的语法:

list<type> list_name;

具体来说:

list<int> Box;

创建结点类型为int,链表名为Box的一个类,一旦有类,就有方法:

list成员   list成员  
front 返回第一个元素的引用 back 返回最后一个元素的引用 
begin  返回第一个元素的指针 end  返回最后一个元素的下一位置的指针
push_back 在链表尾插入一个元素 push_front  增加一个元素到链表头
pop_back  删除链表尾一个元素 pop_front  删除链表头的一个元素
erase  删除一个元素或一个区域的元素 remove  删除链表中匹配值的元素
empty  判定链表是否为空 size  返回链表中的元素个数
sort  排序 insert  在指定位置插入一个或多个元素

遍历

如果需要对链表中的结点进行遍历,需要为链表声明遍历器,语法如下:

list<int>::iterator i;

 一旦有了遍历器,就可以遍历结点,简单例子(结点元素为整型):

#include <iostream>
#include <list> //list头文件
using namespace std;
int main()
{
    int N;
    list<int> Box;
    list<int>::iterator i;
    for(N=0;N<10;N++)
    Box.push_back(N);
    cout<<Box.size()<<endl;//返回链表Box的元素个数;   
    for(i=Box.begin();i!=Box.end();i++)//遍历链表结点
        cout<<*i<<" ";    
    return 0;
}

自定义类型

自定义类型是常见的,前面所说的结点元素要么整型,要么字符型,而实际上类型可以有很多种,比如结构类型。指明一个问题比较明白,比如说,定义一个结构类型,要求能添加元素,删除元素,清空链表。

结构的定义:

typedef struct node
{
    int a;
    char b;
}Node;
//list链表类的研究例子

#include <iostream>
#include <list> //list头文件
using namespace std;    
typedef struct node//元素结点的定义
{
    int a;
    char b;
}Node;

list<Node> Box;//全局Box类
list<Node>::iterator i;//遍历器

int main()
{    
    Node a={20,'a'};//创建一个结点
    Box.push_back(a);//入链表
    Node b={30,'c'};//创建一个结点
    Box.push_back(a);//入链表
    i=Box.begin();//i很像指针
    cout<<i->a<<" "<<i->b<<endl;//打印第一个元素的相关值  
    while(!Box.empty())//清空链表
    {
        Box.pop_back();
    }
    cout<<Box.size()<<endl;
    return 0;
}

从上面可以看出来,STL简化太多,不用再考虑如何将指针指来指去,如何将结点进行连接,一个push_back()就解决了问题。这种先进的东西得学会!

————————————————————————————————————————————————————————————————

 

posted on 2016-04-28 15:47  LuoTian  阅读(350)  评论(0编辑  收藏  举报