- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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 ) ) ; //创建一
文档评论(0)