- 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++ 笔记 第十六天 2007 年 4 月 12 日
1、算法
脱离具体的语言
有穷性 --- 在保证执行有限步骤之后确定能够结束确切性 --- 每条语句具体干什么
输入输出 --- 所有的算法都有输出,打印屏幕,写文件,写DB
2、快速排序法
数据个数超过一个,任选其中一个数据作为分界值,把其他数据按大小关系分为 2 组,分界值在中间
对两组数据实行递归重组
//快速排序算法,效率最高的排序算法。第一个参数表示数组首地址,第二个参数表示数组起始位置,第三个参数表示结束位置
void mysort( int * p , int left , int right ){ int l = left ; //从左侧开始走
int r = right ; //从右侧开始走
int povit = p[(left + right)/2]; //把数组中间的一个数据作为分界点do{
个比自己大的
while( p[l]povit l right ){ //循环退出,则是 l 找到一
l++ ;
}
while( p[r]povit r left ){ r--;
}
if( l = r ){
int t = p[l]; p[l] = p[r]; p[r] = t ; l++;
r--;
}
}while( l = r ); //条件就是左右的两个人还没有碰面
if( r left ){ //只要右边的仍比左边的大,就要继续循环mysort( p , left , r );
}
if( l right ){ //只要左边的仍比右边的大,也要继续循环mysort( p , l , right );
}
}
3、直接使用系统的qsort()函数要自己定义一个排序规则
4、模版
模版的参数至少出现一次,才能确定类型
只能在紧跟的函数中使用,函数声明紧跟在后面
声明多个模版类型 templateclass T1 , class T2 class 关键字不能省略
对于模版类型的要求,要能重载,,=
建议:在编码时能用一种运算符完成的操作,就不要使用多个运算符,避免多个重载
用模版写的函数叫函数模版
函数模版在调用的时候确定类型的用模版写的类叫类模版
数据类型,参数类型,函数返回类型都可以使用模版
类模版不是类,是不完整的类
类模版要在声明时用类名int指定,确定类型
C++的泛型(模版)是编译时确定类型的 --- 效率
Java 的泛型是运行时的
模版类的声明和定义(多文件结构)是不能分开的
模版函数的声明和定义是可以分开的 templateclass T 在头文件和实现文件中都要出现
5、STL 包含三大类,容器类(可以存储其他对象的对象),算法(一系列封装好的函数),迭代器(用于遍历操作的类)
容器可以直接存储对象,也可以存储对象的指针。成熟的程序员喜欢使用间接存储。 容器主要包括两种类型:序列类(一般是线形存储)和关联类(一般是非线性存储)。
vector ---- 数组 可变长 不提供pop_front()删除头元素的函数list 链表
Vector v[1000]当越界的时候,会出现段错误
v.at(1000) 越界的时候,会抛出out_of_range 的异常,
在程序中捕获
(*iter).name
v.size() 返回长度,可利用这个循环迭代
v.empty()判断容器是否为空
Iterator 迭代器 : 可以做取*操作 *iterator
iter-name =
iter++
束标志
v.begin() 指向数组的开始
v.end() 指向数组最后一个元素的后面,是一个结
vector 的一个内部类
前面插入 5
入 5 个 100
新赋值,可以保证继续使用
vectorint v1;
vectorint::iterator it; //iterator 是
for( it = v1.begin(); it != v1.end(); it++ )
cout *it endl; v.insert(iter,5); //在 iter 所指的元素v.insert(iter,5,100); //在 iter 所指的元素前插这样的插入操作,会造成原来的iterator 失效,对起重
list
不能做at()
多了push_front(),pop_front() iter 不能做加n 操作
使用于做频繁的插入删除操作
6、关联式容器
map
适合根据键查找值的操作
存储上按照键值排序 ,并且key 值唯一mapint,Student m;
Student s( 1 ,liucy );
m.insert( mapint,Student::value_type(
s.getId() , s ) ) ; //创建一
您可能关注的文档
最近下载
- 基于stm32的智能宠物喂食系统.doc VIP
- 辽宁名校联盟2025-2026学年高三上学期8月联合考试数学试卷.docx VIP
- 【高分复习笔记】方先明《证券投资学》笔记和课后习题详解.pdf VIP
- 智算中心项目可行性研究报告.docx
- 数学人教版八年级上册全等三角形课后练习.doc VIP
- Unit 7 Will people have robots公开课教学设计.doc VIP
- 12S522混凝土模块式排水检查井.docx VIP
- 智慧农业报告PPT模板.pptx VIP
- 作业1——职业生涯规划档案.doc VIP
- 北京交通大学1998年—2024年891通信系统原理真题及答案.pdf
文档评论(0)