第1章 C++程序设计基础 网络游戏开发-C++程序设计.

Slides:



Advertisements
Similar presentations
六大類食物 五穀根莖類 六大類食物 油脂類 蛋魚肉豆類 奶類 蔬菜類 水果類. 五穀根莖類 : 提供熱量 : 部份蛋白質,維生素,礦物質,及膳食纖維 包含麵 ( 及麵包饅頭 ) ,飯類,蕃薯等食物 也就是一般所稱的 " 主食 " ( 蘿蔔不是這一類,是屬於蔬菜類喔! ) 飲食建議吃三到六碗 並推薦攝取全穀類食品.
Advertisements

正確睡午睡精神更好 正確睡午睡 精神更好 可降血壓 增加思考能力 懶懶的冬天加 上星期一又是假日後上班,如果能夠在 中午補個眠,稍微休息一下,對於精神 的提振及下午工作效率都有幫助。但冬 天睡午覺要注意保暖以及水分的補充, 避免受涼或是血液循環不好,造成手或 腿麻痛,注意這些小地方可以讓睡午睡 更健康!
揮別電腦族疲勞症候群 主講人 : 陳潮宗 中醫師. 常有症狀一 起因&症狀: 起因&症狀: 坐姿不正最易引起腰酸背痛、 過度看螢幕則眼睛疲勞酸痛。 治療重點: 治療重點:補固腰腎、明目保睛。
引言 高血壓自我健康管理包含飲食、 運動、 及健康生活型態三大方向。 飲食 是改善高血壓的重要部分, 並提 供飲食方式來改善高血壓。
1 門市服務丙級技術士 技能檢定介紹 門市服務丙級技術士報告注意事項 證照名稱:門市服務丙級技術士 發照單位:行政院勞工委員會 有效期限:終生有效 考照時間:每年一次,皆為第一梯次 1. 簡章與報名書表發售時間:每年 1 月 2. 報名時間:每年 1 月。 3. 學科考試時間:每年 3.
平面构成 第六章 平面构成形式与法则 — 破规与变异. 第七章 平面构成形式与法则 — 破规与变异 破规与变异构成的形式、有下列四类: 一、特异构成 特异构成。其表现特征是,在普遍相同性质的事物 当中,有个别异质性的事物,便会立即显现出来。
生源地助学贷款系统还款功能优化说明 评审三局 2015年5月.
治癒肺癌 的妙方.
二、信用工具和外汇.
班級:醫管3B 組別:第二組 組員:王品媛、郭雅瑄、謝淑玲、蔡孟蔙
为您扬帆,助您远航! 徽商银行特色新产品介绍. 为您扬帆,助您远航! 徽商银行特色新产品介绍.
男性生殖系統.
公务卡使用说明.
财务知识培训 杨 秀 玲 2014年10月.
第 2 章 初探 C++.
Memory Pool ACM Yanqing Peng.
量子與能源 石化能源危機 核分裂能 核融合能 太陽能 燃料電池.
指導老師:楊淑娥 組別:第一組 成員:劉怡萱4a0i0066 吳珮瑜4a0i0070 林秋如4a0i0075 陳婉婷4a0i0076
第一章会计技能的内容 1.1会计技能的重要性.
2016中重卡网络规划 中重卡营销部 2016年6月.
第11章 使用类.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
前不久看到了这样一则报道:某个大学校园里,一个大学生出寝室要给室友留一张字条,告诉他钥匙放在哪里。可是“钥匙”两个字他不会写,就问了其他寝室的同学,问了好几个,谁也不会写,没办法,只好用“KEY”来代替了。 请大家就此事发表一下自己看法。
实践 课题 周围环境对当代大学生成长的影响 指导老师:王永章 小组成员:陈荣、刘若楠、张红艳、吕雪丹、樊金芳、李惠芬、黄婧
利用共同供應契約 辦理大量訂購流程說明.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
Scope & Lifetime 前言 Local Scope Global Functions & Objects
Ch13 集合與泛型 物件導向程式設計(2).
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
哈夫曼编码.
第五章 模 板.
导入 STL的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) Adaptors(配接器)
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
前處理指令可以要求前處理器 (preprocessor) 在程式編譯之前,先進行加入其它檔案的內容、文字取代以及選擇性編譯等工作。
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
Lecture 1 STL Primer.
【STL標準樣版函式庫】 STL(Standard Template Library),即標準樣版函式庫,是一個具有工業標準、高效率的C++函式庫。它包含於C++標準函式庫(C++ Standard Library)中,是ANSI/ISO C++標準中,最新的、也是極具革命性的一部分。STL包含了諸多在電腦科學領域裏所常用的基本資料結構和基本演算法。為廣大C++程式師們提供了一個可擴展的應用框架,高度實現了軟體的可複用性。這種現象有些類似於Microsoft.
C++程序设计 string(字符串类) vector(容器类).
C++语言程序设计 第二章 C++简单程序设计.
集合框架和泛型(一).
本著作除另有註明外,採取創用CC「姓名標示-非商業性-相同方式分享」台灣2.5版授權釋出
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第三章 链表 单链表 (Singly Linked List) 循环链表 (Circular List) 多项式及其相加
Introduction to lisp lisp.
序及第0章.
二叉树的遍历.
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
潘爱民 C++ Overview 潘爱民
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
上海交通大学 ACM班 原作者 2015级 卢思迪 部分调整 2016级 刘啸远 加了一点点 2017级 侯博涵
北投溫泉博物館 建築特色 ★小組成員:高103林孟璇、林念儀、施妤柔★.
保留字與識別字.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
美麗的西子湖.
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
C++程式設計入門 變數與運算子 作者:黃建庭.
第三章 世界文明的蛻變與互動 第一節 歐洲社會的蛻變 第二節 世界文明的交匯 第三節 亞洲大帝國的發展 1.
兒童及少年保護、 家庭暴力及性侵害事件、 高風險家庭 宣導與通報
第 8 章 标准模板库STL 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++语言程序设计 第十章 C++标准模板库 成都信息工程学院计算机系.
本章主題 C++的程式結構 資料型態與宣告 算術運算 簡易的輸入輸出指令 程式編譯(Compile)的過程與原理.
C++程序设计 概述 潘荣江 山东大学软件学院.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
變數與資料型態  綠園.
C++程序语言设计 Chapter 14: Templates.
6 集合类与泛型.
Presentation transcript:

第1章 C++程序设计基础 网络游戏开发-C++程序设计

第9章 模板与STL 标准模板库 常用的容器 容器的概念 迭代器 映射的概念 迭代器的使用 了解标准模板库 掌握常用容器的使用

第9章 模板与STL 9.2 STL的使用 STL(Standard Temporary Library)是C++标准的一部分 提供一系列核心组件: 用以支持I/O、 字符串(strings) 容器(数据结构) 算法(排序、搜索、合并等等) 数值计算、多字符集等主题。

第9章 模板与STL 9.2 STL的使用 9.2.1 STL中的容器的概念和要求 STL中的容器(Container)是可容纳一些数据的模板类,包括 vector list set map 大大方便了程序员对程序中数据的组织和保存 具有保存和操作数据集合的能力. 提高了开发效率。

第9章 模板与STL 9.2 STL的使用 9.2.1 STL中的容器的概念和要求 容器有相同的函数接口 这些函数主要是用于进行数据比较、迭代和存储的 STL容器的特点 1)插入操作时,内部实现的是拷贝操作,置于容器内。 2)所有元素形成一个次序(order)。 3)各项操作并非绝对安全。

第9章 模板与STL 9.2 STL的使用 9.2.1 STL中的容器的概念和要求 各个容器共通的函数 操作 功能 ContType c 产生一个未含任何元素的空容器 ContType c1(c2) 产生一个同型容器 ContType c(beg, end) 复制[beg; end]区间内的元素,作为容器初值 c.~ContType() 删除所有元素,释放内存 c.size() 返回容器中的元素数量 c.empty() 判断容器是否为空(相当于size()==0,但可能更快) c.max_size() 返回元素的最大可能数量 c1 == c2 判断是否c1等于c2 c1 != c2 判断是否c1不等于c2,相当于!(c1==c2) c1 < c2 判断是否c1小于c2 c1 > c2 判断是否c1大于c2,相当于c2<c1 c1 <= c2 判断是否c1小于等于c2,相当于!(c2<c1) c1 >= c2 判断是否c1大于等于c2,相当于!(c1<c2)

第9章 模板与STL 9.2 STL的使用 9.2.1 STL中的容器的概念和要求 c1 = c2 将c2的所有元素赋值给c1 c1.swap(c2) 交换c1和c2的数据 swap(c1, c2) 同上,是个全局函数 c.begin() 返回一个迭代器,指向第一元素 c.end() 返回一个迭代器,指向最后元素的下一位置 c.rbegin() 返回一个逆向迭代器,指向逆向遍历时的第一元素 c.rend() 返回一个逆向迭代器,指向逆向遍历时的最后元素的下一位置 c.insert(pos, elem) 将elem的一份副本安插于pos处。返回值和pos的意义并不相同 c.erase(beg, end) 移除[beg; end]区间内的所有元素。某些容器会返回未被移除的第一个接续元素 c.clear() 移除所有元素,令容器为空 c.get_allocator() 返回容器的内存模型(memory model)

第9章 模板与STL 9.2 STL的使用 9.2.1 STL中的容器的概念和要求 迭代器(iterator) “能够遍历某个序列内的所有元素”的对象。 它可以通过与一般指针一致的接口来完成自已的工作。 迭代器奉行一个纯抽象概念:任何东西,只要行为类似迭代器,那么它就是一种迭代器。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 1.vector的能力和使用 namespace std { template <class T, class Allocator = allocator<T>> class vector; } 其中元素T可以是任意数据类型,只要T具有赋值和拷贝能力。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 1.vector的能力和使用 1)它是一个有序集群(ordered collection),支持随机存取,因此只要知道位置,就可以存取这个元素; 2)在末端附加或删除元素时,vector性能很高。 3)vector的容量是可配置的。 4)可以使用reserve()配置容量。(只能用来扩大容量,但不能缩减容量) std::vector<int> v; v.reserve(80);

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 1.vector的能力和使用 vector<int> v; vector<int>::iterator iter; // 增加元素 v.reserve(20); v.push_back(5); v.push_back(10); v.push_back(20); // 插入元素 v.insert(v.begin()+2, 15); // 遍历访问 cout<<"v= "; for (iter = v.begin(); iter != v.end(); iter++) { cout<<" "<<*iter; } v.erase(v.begin() +1);

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 2. list的能力和使用 list容器可以理解为是一个双向链表。它包含在头文件<list>中 namespace std { template <class T, class Allocator = allocator<T>> class list; } 元素T可以是任意数据类型,只要T具有赋值和拷贝能力。 参数Allocator是用于定义内存模型的,在使用时采用默认参数即可。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 2. list的能力和使用 1)不支持随机存取 2)在任何位置上的插入和删除操作,性能都是很高的。 3)list没有容量的概念,所以也没有空间重新分配等操作;

第9章 模板与STL 9.2 STL的使用 函数 功能 c.unique() 如果存在若干相邻而数值相等的元素,就删除重复元素,只留一个  [fww1]什么是已序? 第9章 模板与STL 9.2 STL的使用 函数 功能 c.unique() 如果存在若干相邻而数值相等的元素,就删除重复元素,只留一个 c.unique(op) 如果存在若干相邻元素,都使op()的结果为true,则删除重复元素,只留一个 C1.splice(pos, c2) 将c2内的所有元素转移到c1之内,迭代器pos之前 C1.splice(pos, c2, c2pos) 将c2内的c2pos的所指元素转移到c1内的pos所指位置上(c1和c2可相同) C1.splice(pos, c2, c2beg, c2end) 将c2内的[c2beg; c2end]区间内所有元素转移到c1内的pos之前(c1和c2可相同) c.sort() 以operator<为准则,对所有元素排序 c.sort(op) 以op()为准则,对所有元素排序 C1.merge(c2) 假设c1和c2容器都包含已序(sorted)元素,将c2的全部元素转移到c1,并保证合并后的list仍为已序  C1.merge(c2, op) 假设c1和c2容器都包含op()原则下的已序(sorted)元素,将c2的全部元素转移到c1,并保证合并后的list仍为已序 c.reverse() 将所有元素反序(reverse the order)

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 2. list的能力和使用 list <int> c1, c2, c3; list <int>::iterator c1_Iter, c2_Iter, c3_Iter; // 赋值 c1.push_back( 3 ); c1.push_back( 6 ); c3.push_back( 1 );   cout << "c1 ="; for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ ) cout << " " << *c1_Iter; c2.merge( c1 );

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 3. set的能力和使用 包含在头文件<set>中 namespace std { template <class T, class Compare = less<T>, class Allocator = allocator<T>> class set; } 其中元素T可以是任意数据类型,只要T具有赋值和拷贝能力。 第二个参数Compare用于确定按什么数据类型来排序,使用默认参数即可。 第三个参数Allocator是用于定义内存模型的,在使用时采用默认参数即可。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 3. set的能力和使用 set作为一个类似于平衡二叉树的容器 1)具有自动排序能力,使元素的搜索有良好性能; 2)由于二叉树的特点决定,对set容器中的元素不能直接修改。如果想修改,可以采用的办法是先删除这个元素,再插入新的元素; 3)set不提供用来直接存取元素的任何操作。通过迭代器进行元素间接存取,可视这些元素是常数。 4)set在元素搜寻方面有优化设计,所以提供了特殊的搜寻函数。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 3. set的能力和使用 函数 功能 count(elem) find(elem) 返回“元素值为elem”的第一个元素,如果找不到就返回end() lower_bound(elem) 返回elem的第一个可插入位置,也就是“元素值 >= elem”的第一个元素位置 upper_bound(elem) 返回elem的最后一个可插入位置,也就是“元素值 > elem”的第一个元素位置 equal_range(elem) 返回elem可插入的第一个和最后一个位置,也就是“元素值 == elem”的第一个元素区间

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 3. set的能力和使用 set <int> s1; set <int> :: const_iterator s1_AcIter, s1_RcIter; // 赋值 s1.insert( 10 ); s1.insert( 20 ); s1.insert( 30 ); s1_RcIter = s1.lower_bound( 20 ); cout << *s1_RcIter << "." << endl; s1_RcIter = s1.lower_bound( 40 );

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 4.map的能力和使用 namespace std { template < class Key, class Type, class Traits = less<Key>, class Allocator=allocator<pair <const Key, Type> > class map; } map一般译为映射,映射指的是一个范畴内的事物与另一个范畴内事物的对映关系。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 4.map的能力和使用 namespace std { template < class Key, class Type, class Traits = less<Key>, class Allocator=allocator<pair <const Key, Type> > class map; } 1)Key:键值; 2)Type:元素值; 3)Traits:按什么数据类型来排序,默认为以键值的数据类型来排序; 4)Allocator:内存模型,采用默认值。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 4.map的能力和使用 map即映射 一个范畴内的事物与另一个范畴内事物的对映关系。 在数据结构领域内: 一种数据类型与另一种数据类型的一一对应关系。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 4.map的能力和使用 在数据结构领域内:一种数据类型与另一种数据类型的一一对应关系。 1)可以把set看作是一类特殊的map,也就是当键值和元素值是同一对象时,就和set一样了; 2)对于键值不可以直接修改,要想实现修改的办法是先删除再插入; 3)map内的元素是“键值/元素值”成对(pair)插入的。 4)map在元素搜寻方面是通过对键值的搜寻实现的,所以提供了特殊的搜寻函数。

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 4.map的能力和使用 map<string, float> coll; // 运用value_type插入 coll.insert(map<string, float>::value_type("otta", 21.1)); // 运用pair<>插入 coll.insert(pair<string, float>("ottb", 22.2)); // 运用make_pair()插入 coll.insert(make_pair("ottc", 23.3));

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 4.map的能力和使用 函数 功能 count(key) find(key) 返回“键值等于key”的第一个元素,找不到就返回end() lower_bound(key) 返回“键值为key”的元素的第一个可插入位置,也就是“键值>=key”的第一个元素位置 upper_bound(key) 返回“键值为key”的元素的最后一个可插入位置,也就是“键值>key”的第一个元素位置 equal_range(key) 返回“键值为key”的元素的第一个可插入位置和最后一个可插入位置,也就是“键值==key”的元素区间

第9章 模板与STL 9.2 STL的使用 9.2.2 STL中容器的使用 4.map的能力和使用 map<int, int> m1; map<int, int>::const_iterator m1_AcIter, m1_RcIter; typedef pair<int, int> Int_Pair; // 成对插入元素 m1.insert(Int_Pair(1, 10)); m1.insert(Int_Pair(2, 20)); m1.insert(Int_Pair(3, 30)); m1_RcIter = m1.find(2); cout<< "键值 2 映射的元素是: " << m1_RcIter -> second << "." << endl;

第9章 模板与STL 小结 本章主要讲解STL基础知识 标准模板库 常用的容器

第9章 模板与STL 自测题 1.以下那一个不是vector的特点( )。 A. 支持随机存取 B. 在末端添加和删除元素,性能非常好 D. 容量是可配置的 2.迭代器就是一个指向元素的指针。( )

第9章 模板与STL 自测题 1.以下那一个不是vector的特点( C )。 A. 支持随机存取 B. 在末端添加和删除元素,性能非常好 D. 容量是可配置的 2.迭代器就是一个指向元素的指针。( X )

第9章 模板与STL 课后作业 【作业1】 使用容器,保存一组整数,要求能随机存取,插入和删除操作方便。 【作业2】 使用map,保存一组整数和名字,输入名字,可以找到整数。