(word)达内--C++(day16).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(word)达内--C(day16)

C++笔记 day16 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、模版 (1)模版的参数至少出现一次,才能确定类型 (2)只能在紧跟的函数中使用,函数声明紧跟在后面 声明多个模版类型 template class T1 , class T2 class关键字不能省略 (3)对于模版类型的要求,要能重载 , , 建议:在编码时能用一种运算符完成的操作,就不要使用多个运算符,避免多个重载 (4)用模版写的函数叫函数模版 函数模版在调用的时候确定类型的 用模版写的类叫类模版 数据类型,参数类型,函数返回类型都可以使用模版 类模版不是类,是不完整的类 类模版要在声明时用类名 指定,确定类型 (5)C++的泛型(模版)是编译时确定类型的 --- 效率 Java的泛型是运行时的 (6)模版类的声明和定义(多文件结构)是不能分开的 模版函数的声明和定义是可以分开的 template 在头文件和实现文件中都要出现 5、STL包含三大类,容器类(可以存储其他对象的对象),算法(一系列封装好的函数),迭代器(用于遍历操作的类) 容器可以直接存储对象,也可以存储对象的指针。成熟的程序员喜欢使用间接存储。 容器主要包括两种类型:序列类(一般是线形存储)和关联类(一般是非线性存储)。 vector ---- 数组 可变长 不提供pop_front 删除头元素的函数 list ----- 链表 (1)Vector v[1000]当越界的时候,会出现段错误 v.at 1000 越界的时候,会抛出out_of_range的异常,在程序中捕获 v.size 返回长度,可利用这个循环迭代 v.empty 判断容器是否为空 Iterator迭代器 : 可以做取*操作 *iterator iter- name *iter .name iter++ v.begin 指向数组的开始 v.end 指向数组最后一个元素的后面,是一个结束标志 vector v1; vector ::iterator it; //iterator是vector的一个内部类 for it v1.begin ; it ! v1.end ; it++ cout *it endl; v.insert iter,5 ; //在iter所指的元素前面插入5 v.insert iter,5,100 ; //在iter所指的元素前插入5个100 这样的插入操作,会造成原来的iterator失效,对起重新赋值,可以保证继续使用 (2)list 不能做at 多了push_front ,pop_front iter不能做加n操作 使用于做频繁的插入删除操作 6、关联式容器 (1)map 适合根据键查找值的操作 存储上按照键值排序 ,并且key值唯一 map int,Student m; Student s 1 ,liucy ; m.insert map int,Student ::value_type s.getId , s ; //创建一

文档评论(0)

hwvm6404 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档