STL(1)
这一篇因为游戏设计而写的,里面采用了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=;N<;N++)
Box.push_back(N);
cout<<Box.size()<<endl;//返回链表Box的元素个数;
for(i=Box.begin();i!=Box.end();i++)//遍历链表结点
cout<<*i<<" ";
return ;
}
自定义类型
自定义类型是常见的,前面所说的结点元素要么整型,要么字符型,而实际上类型可以有很多种,比如结构类型。指明一个问题比较明白,比如说,定义一个结构类型,要求能添加元素,删除元素,清空链表。
结构的定义:
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={,'a'};//创建一个结点
Box.push_back(a);//入链表
Node b={,'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 ;
}
从上面可以看出来,STL简化太多,不用再考虑如何将指针指来指去,如何将结点进行连接,一个push_back()就解决了问题。这种先进的东西得学会!
————————————————————————————————————————————————————————————————
STL(1)的更多相关文章
- 使用VS2012编译和使用C++ STL(STLport)
使用VS2012编译和使用C++ STL(STLport) http://cstriker1407.info/blog/use-vs2012-to-compile-and-use-the-c-stl- ...
- [转贴]从零开始学C++之STL(一):STL六大组件简介
一.STL简介 (一).泛型程序设计 泛型编程(generic programming) 将程序写得尽可能通用 将算法从数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 (二 ...
- C++STL(二)——vector容器
STL--vector容器 vector对象的概念 vector基本操作 vector对象的初始化.赋值 vector查找.替换(已在上一片 string类 博客总结过了,不再总结) vector添加 ...
- STL(六)——map、multimap
STL--map.multimap 文章目录 STL--map.multimap 关联容器与map的介绍 map与set的异同 map与multimap的异同 map类对象的构造 map添加元素 ma ...
- C++学习之STL(一)vector
前言 C++ Primer Plus读书笔记(三)复合类型 中已经简单介绍过vector是什么,这个系列主要是介绍STL特性. 声明 vector<ElemType> c; //创建一个空 ...
- 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
一.移除性算法 (remove) C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
- 51 nod 1624 取余最长路 思路:前缀和 + STL(set)二分查找
题目: 写这题花了我一上午时间. 下面是本人(zhangjiuding)的思考过程: 首先想到的是三行,每一行一定要走到. 大概是这样一张图 每一行长度最少为1.即第一行(i -1) >= 1, ...
- ACM竞赛常用STL(二)之STL--algorithm
<algorithm>无疑是STL 中最大的一个头文件,它是由一大堆模板函数组成的.下面列举出<algorithm>中的模板函数: adjacent_find / binary ...
- ACM竞赛常用STL(一)
全排列函数next_permutation STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include <algorithm> using namespac ...
随机推荐
- JS语法(二)
JS变量 var 变量名 = 变量值://自己会判断什么类型 一个好的编程习惯是,在代码开始处,统一对需要的变量进行声明. var name = “xiaosan”, age = 22, addres ...
- 关于HTML(JSP)页面的缓存设置 -- cache-control
我在项目中遇到这么一个问题,当用户登录了系统后,进入并copy下系统某个页面的link,然后关闭浏览器,重新打开浏览器,把刚才复制好的link paste到浏览器的地址栏去,直接enter,发现浏览器 ...
- jquery的.submit
$("form").submit(function(e){ alert("Submitted"); });
- 初学matlab----函数用法(随学习更新中)
sort(A) 若A是向量不管是列还是行向量,默认都是对A进行升序排列. sort(A)是默认的升序,而sort(A,'descend')是降序排序. sort(A)若A是矩阵,默认对A的各列进行升序 ...
- mac上抓iphone数据包
iOS 5后,apple引入了RVI remote virtual interface的特性,它只需要将iOS设备使用USB数据线连接到mac上,然后使用rvictl工具以iOS设备的UDID为参数在 ...
- Java中的容器
参考链接:Java容器与泛型(1) 认识容器,Java容器与泛型(2) ArrayList.LinkedList和Vector比较,Java容器与泛型(3) Hashset.TreeSet和Linke ...
- 简单的javascript--test2
插件: jquery, sweetalert (http://t4t5.github.io/sweetalert/ ) 1.index.html <!DOCTYPE HTML> <h ...
- Cadence UVM基础视频介绍(UVM SV Basics)
Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...
- 编程范式 episode3 and 4,5
episode 3 --storage structure. ampersand operate with asterisk --library function episode 4 --generi ...
- CSS布局--浮动与清除
浮动和清除 浮动和清除是页面布局的重要属性.浮动的意思是指将元素从常规的文档流中取出来. 当你浮动一个元素的时候,浮动的元素会被浏览器尽量的往上放,能放多高就放多高,一直到某个元素的边界为止. 浮动元 ...