这一篇因为游戏设计而写的,里面采用了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()就解决了问题。这种先进的东西得学会!
————————————————————————————————————————————————————————————————