- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C课件第8章泛型2
第八章 泛型2----数组与字符串
这一章的内容包括:
数组:C/C++数组的一些特性
向量:了解STL。
字符串:了解STL。
一、数组
1.C语言数组的基本特性
C语言数组的长度是固定的数组一经创建就不允许动态的修改长度指针遍历和检索数组中的元素如果需要更改数组的长度,就必须再声明一个更大的数组malloc()为其分配内存),把原来数组的内容copy到新数组中去数组a的内容复制给数组b,不能用b = a 。应该用标准库函数strcpy进行复制。比较b和a的内容是否相同,不能用if(b==a) 来判断,应该用标准库函数strcmp进行比较。int a1[100000];
//全局(变量)数组,编译器在堆中分配内存
static int a2[100000];
main(){
//局部数组,编译器在栈中分配内存
int a3[100];
//局部静态数组,编译器在堆中分配内存
ststic int a4[100];
}
int fun(){
//局部数组,编译器在栈中分配内存
int a5[100];
//局部静态数组,编译器在堆中分配内存
ststic int a6[100];
}
//上面例子的数组都是由编译器分配/去配内存,不用程序员干预。
程序员干预数组内存分配会怎么样?可以用malloc()为数组分配内存,free()去配内存。凡是使用malloc()分配内存的,无论是全局数组还是局部数组,都是堆分配。
上面的例子告诉我们,对大数组内存分配不当容易造成栈溢出。解决办法有两个:或将数组定义为全局的(堆分配),或使用malloc()为数组分配内存(此时数组可以是局部的)
Q1:了解C语言大数组内存分配的两种解决办法。
3.C++数组的基本特性
C++数组保留了上述C语言数组的特性,还有一些面向对象的升级,主要有:
可以用new为数组分配内存,用delete去配内存。比如:char? *p1=new char[10000]; ?delete p1;其使用条件和原则与使用malloc()基本一致。用new分配内存的数组建在堆上,无论数组是全局的还是局部的。
可以定义对象数组,即数组元素都是对象。不推荐使用。
二、向量(vector)
因为数组存在内存安全隐患,所以C++最好使用vector避免使用低级的数组和指针只有在强调速度时才使ector是C++ STL(标准模板库)的一部分,通过对vector的学习,有助于了解STL。
1 STL概念
STL包括广义上分为三类:algorithm(算法)、container(容器)和iterator(迭代器)容器迭代器
关联式容器:关联式容器是非线性的树结构,更准确的说是二叉树结构。关联式容器另一个显著的特点是它是以键值的方式来保存数据,就是说它能把关键字和值关联起来保存。
容器适配器:适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器是让一种已存在的容器类型采用另一种不同的抽象类型的工作方式来实现的一种机制,其实仅是发生了接口转换。可以把它理解为容器的容器,它实质还是一个容器,只是他不依赖于具体的标准容器类型。(对容器适配器,可以想象成一个电源转接变换插头)。
下表列出STL 定义的三类容器所包含的具体容器类(该表在课件第7章中也出现过):
数据结构 实现头文件 向量(vector) vector 列表(list) list 双队列(deque) deque 集合(set) set 多重集合(multiset) set 栈(stack) stack 队列(queue) queue 优先队列(priority_queue) queue 映射(map) map 多重映射(multimap) map
Q3 什么是叠代器?
迭代器是一种允许程序员检查容器内元素,并实现元素遍历的数据类型(类)。C++标准库为每一种标准容器定义了一种迭代器类型。迭代器类型提供了比下标操作更一般化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器(比如数组)支持下标操作。因为迭代器对所有的容器都适用,现代C++程序更倾向于使用迭代器而不是下标操作访问容器元素。
迭代器从作用上来说是最基本的部分迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件utility,iterator 和memory组成。vector模板类简介
向量(vector)是STL中的一种顺序性容器类,因为数组存在内存安全隐患,所以C
您可能关注的文档
最近下载
- 7.1《短歌行》课件(共56张PPT)2024-2025学年统编版高中语文必修上册.pptx VIP
- 《GB/T 18281.7-2024医疗保健产品灭菌 生物指示物 第7部分:选择、使用和结果判断指南》.pdf
- 微科安装使用说明书调皮%时间.pdf VIP
- HG_T 5171-2017 粒状中微量元素肥料.docx
- 检验检测机构管理评审参考.doc VIP
- 自由体位分娩理论考核试题及答案.docx VIP
- PyQt5入门教程实用知识库分享20240314102955.pdf VIP
- JJF 2182-2024 农灌机井取水量计量监测方法.pdf VIP
- 企业一站式数据开发与治理平台解决方案(35页).pptx VIP
- 新能源汽车检测与维修技术专业人才培养方案.docx VIP
文档评论(0)