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 ...
随机推荐
- 剑指Offer:面试题19——二叉树的镜像(java实现)
问题描述: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树结点定义为: public class TreeNode { int val = 0; TreeNode left = null; Tr ...
- springmvc常用注解与类型转换
springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --> <context:annotation ...
- Linux学习笔记——查看Linux系统信息的方法
由于Linux的发行版本比较多,并且有些差异性,所以,分析问题时我们常常需要知道自己的Linux系统的版本信息,以下是我搜集到的一些方法 1:显示电脑以及操作系统的相关信息 qian@ubuntu:~ ...
- Android软件更新安装。
app的开发有一个问题是避免不了的,那就是软件的升级维护. 这里我在查过一些资料和写了一个升级帮助类.使用很方便.直接导入就可以了. ( VersionBean.class为更新地址返回的数据对象,我 ...
- QTP全选页面的复选框
Set glht= Browser("管理后台").Page("管理后台") Set Mydescription = description.Create()M ...
- 返回记录结构时,如果需要返回为nil时 应该怎么办。
- 第一零二天上课 PHP TP框架 引入文件路径问题和调用验证码的方式
外部文件引入到视图模板的方式 1,将外部文件放在Public文件夹下,用load标签引入 2,在模板出书写引入代码(方法有很多,只有以下方法不容易出问题) <load h ...
- VS2008的DLL项目添加了方法但是找不到怎么办?
VS2008中建立了一个DLL项目,使用了一段时间后,在其中一个类中添加了一个方法,然后编译后,拷贝了新的.h文件到使用DLL的项目中,并且.dll和.lib也拷贝到了需要的位置,但是在目标项目中 ...
- css兼容tooltip提示框方法
最终效果图: 基本原理 先设定一个背景色的普通div盒子,然后使用上篇post得到的三角型图标,把div盒子设置为相对定位模式,三角型图标设置为绝对定位,位置相对于div盒子,调整到合适的位置.这样就 ...
- [转]Python学习资料和教程pdf
开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...