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 ...
随机推荐
- adb命令安装apk,和安装问题daemon not running. starting it now on port 5037解决
通过手机测试手机上的客户端应用,一般需要先安装被测应用apk到手机中,安装步骤如下: [预置条件] 1.通过PC的"开始",在运行框中输入cmd,回车,打开cmd编辑界面: 2.手 ...
- 在silverlight中通过WCF连接ORACLE DB数据库(转)
转自 http://hi.baidu.com/qianlihanse/item/458aa7c8d93d4e0cac092ff4 这不是我的原创,我也是上网学习的~ How to get data f ...
- mysql Can't connet MySQL server to '@localhost'
10063/10060/10038好像都能解决 mysql -nt -remove mysql -nt install
- ps 进程查看器
命令参数 a 显示所有进程 -a 显示同一终端下的所有程序 -A 显示所有进程 c 显示进程的真实名称 -N 反向选择 -e 等于"-A" e 显示环境变量 f 显示程序间的关系 ...
- jsTree搜索排序向上向下
var _node = null, _all_match = 0, _current_match = 0; $(document).ready(function() { $('#area_settin ...
- 在MS SQLSERVER中如何最快的速度清空所有用户表的数据
有时候我们需要清空数据库中所有用户表的数据,如果一张表一张表的清空的话,遇到一个庞大的数据系统估计得崩溃了. 用游标加上用变量来引用表名就可以做到这一点. 用变量来引用表名对表操作可以用在存储过程中 ...
- LinQ 基础
LinQ全名:Linq to Sql,是一种数据库访问技术 常见的数据库访问技术: 1.ADO.NET 2.Entity Framework 框架 3.LinQ LinQ是高集成化的数据访问类,它会 ...
- android通过gradle打包
这里是最简单的打包方法,实际上gradle的语法是groovy,可以通过编写脚本实现更智能的构建,这个我还不懂==,等我学习了解后,单独整理一个gradle的随笔,这里先应付打包吧 环境要求 安装 ...
- python第十一天-----补:线程池
低版本: #!/usr/bin/env python import threading import time import queue class TreadPool: ""&q ...
- ios8以后,使用UIAlertViw时pop/push页面后,键盘闪一下的问题
代码为 UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"感谢你对我们提出的意见或 ...