第9章 类属机制--模板2.ppt

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

vector vector重新调整尺寸 加倍 svec的原始定义容量是 初始长度24 容量24 vector的size加倍, 容量也加倍 vectorstring svec(24, “pooh”); svec.resize(2 * svec.size()); svec.resize(2 * svec.size(), “piglet”); vector还是list vector 元素顺序存储在连续的内存区域 随机访问效率高, 离vector起始处的位移固定 在任意位置插入元素, 则效率很低. list 元素存储在非连续的内存区域, 指向首尾元素的指针双向链接起来, 允许向前和向后两个方向进行遍历 在任意位置插入和删除元素, 效率高 随机访问效率低. vector还是list 选择准则: 需要随机访问一个容器, 则vector比list要好 已知要存储的元素个数, 则vector比list要好 在容器任意点插入删除, 则list比vector要 有时需要考虑容器性能, 或者自己设计结构 list以简单方式增长, vector动态增长复杂 迭代器 —— Iterator 每一个容器类都嵌入一个迭代器类; 一个迭代器引用容器的元素,并能够通过某个操作使迭代器引用容器中下一个元素; 即它能够按预先规定的顺序存取容器内的每个元素,而不涉及容器的任何实现细节。 iterator的定义 (模版和嵌套类) 迭代器 概念(iterator) 提供了一种一般化的方法, 对顺序或关联容器类型中的每个元素进行连续访问 使用方式 ++iter *iter begin()和end()函数 begin(): 返回一个iterator, 它指向容器的第一个元素 end(): 返回一个iterator, 它指向容器末元素的下一个位置 iterator的使用方式 使用方式 用begin()和end()所返回的迭代器 定义方式 for (iter = container.begin(); iter != container.end(); ++iter) { do_something_with_element(*iter); } // vectorstring vec; vectorstring::iterator iter = vec.begin(); vectorstring::iterator iter_end = vec.end(); const iterator 含义 每个容器还定义一个const iterator类型, 用于遍历const容器 #include vector void even_odd(const vectorint *pvec, vectorint *pvec_even, vectorint *pvec_odd) { // 必须声明一个const_iterator, 才能够遍历pvec vectorint::const_iterator c_iter = pvec-begin(); vectorint::const_iterator c_iter_end = pvec-end(); for ( ; c_iter != c_iter_end; ++c_iter) if (*c_iter % 2) { pvec_odd-push_back(*c_iter); } else pvec_even-push_back(*c_iter); } // ok: 把一个非 const iterator 初始化为一个 const vector int ::const_iterator iter2 = vec0.begin(); iterator的标量运算 含义 每个容器还定义一个const iterator类型, 用于遍历const容器 iterator算术标量运算只适用于vector或deque, 而不适用于list vectorint::iterator iter = vec.begin() + vec.size() / 2; iter += 2; 五种iterator 五种iterator 1. InputIterator 用来读取容器中的元素, 不保证向容器的写入操作 最小支持:==, !=, ++(前置, 后置), *(取内容) 支持算法:find, accumulate, equal 传递第3, 4, 5项的iterator中的任一个作函数实参 2. OutputIterator 用来向容器写入元素, 不保证读取容器的内容 一般作算法的第三个实参, 标记出起始写入的位置 传递第3, 4,

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档