C++ STL学习——STL_algorithm.doc_第1页
C++ STL学习——STL_algorithm.doc_第2页
C++ STL学习——STL_algorithm.doc_第3页
C++ STL学习——STL_algorithm.doc_第4页
C++ STL学习——STL_algorithm.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+ STL学习STL_algorithm今天我们来讲讲STL中比较大的一个库. 主要是一些算法的运算的实现,示例代码上传至 /chenyufeng1991/STL_algorithm 。 在使用STL中的algorithm之前,需要导入头文件#include.(1)max(),min()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void MaxAndMin() int maxI = 3; int maxJ = 4; cout 较大值为: max(maxI,maxJ) endl; cout 较小值为: min(maxI,maxJ) endl; max和min就是取两个数中的最大值与最小值。(2)由于下面有些方法的示例需要打印vector,所以我在这里先实现vector的打印算法cpp view plain copy print?在CODE上查看代码片派生到我的代码片void PrintVector(vector v) vector:iterator vIterator; for (vIterator = v.begin(); vIterator != v.end(); vIterator+) cout *vIterator ; cout endl; 这里使用迭代器来访问vector,并按顺序打印结果。(3)sort(),reverse()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void SortAndReverse() vector myVector; myVector.push_back(2); myVector.push_back(9); myVector.push_back(1); myVector.push_back(0); myVector.push_back(7); cout 排序前的序列:; PrintVector(myVector); sort(myVector.begin(), myVector.end(); cout 升序排序后的序列:; PrintVector(myVector); reverse(myVector.begin(), myVector.end(); cout 降序排序后的序列:; PrintVector(myVector); sort是升序排序函数,reverse是降序排序函数。vector本身自己也有sort可以直接调用。(4)find()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void FindVector() vector myVector; myVector.push_back(2); myVector.push_back(4); myVector.push_back(6); myVector.push_back(8); myVector.push_back(0); vector:iterator vIterator; vIterator = find(myVector.begin(), myVector.end(), 6); if (vIterator = myVector.end() cout 未找到 endl; else cout 找到: *vIterator endl; find函数使用迭代器来进行查找某个数,如果到达end位置还没有找到,则表示没有这个数。迭代器会在第一次出现该数字时返回。(5)equal()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void EqualVector() vector myVector1; myVector1.push_back(1); myVector1.push_back(5); myVector1.push_back(7); myVector1.push_back(9); vector myVector2; myVector2.push_back(1); myVector2.push_back(5); myVector2.push_back(7); myVector2.push_back(9); bool isEqual = equal(myVector1.begin(), myVector1.end(), myVector2.begin(); if (isEqual) cout 相等 endl; else cout 不相等 endl; equal()可以判断两个vector是否相等,equal会根据每一个位置去进行比较。(6)merge()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void MergeVector() vector myVector1; myVector1.push_back(1); myVector1.push_back(5); myVector1.push_back(7); myVector1.push_back(9); vector myVector2; myVector2.push_back(2); myVector2.push_back(3); myVector2.push_back(4); myVector2.push_back(5); / 需要在合并前排序 sort(myVector1.begin(), myVector1.end(); sort(myVector2.begin(), myVector2.end(); / 需要指定结果集的大小 vector myResult(8); merge(myVector1.begin(), myVector1.end(), myVector2.begin(), myVector2.end(), myResult.begin(); cout 合并后的序列为:; PrintVector(myResult); merge可以实现两个有序vector的合并,合并后的vector依然是有序的。合并后的vector放到新的结果集中,需要事先指定其大小。(7)swap()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void SwapObject() int i = 2; int j = 3; cout 交换之前两个数的值:; cout i = i ;j = j endl; swap(i, j); cout 交换之后两个数的值:; cout i = i ;j = j unique-erase / vector可以由数组进行初始化 void UniqueVector() int array = 5, 3, 1, 3, 2, 5; vector vectorFromArray(array, array + sizeof(array) / sizeof(int); sort(vectorFromArray.begin(), vectorFromArray.end(); vector:iterator iter = unique(vectorFromArray.begin(), vectorFromArray.end(); vectorFromArray.erase(iter, vectorFromArray.end(); cout 去重之后的序列:; PrintVector(vectorFromArray); 由代码中可以看到,vector并不一定需要通过push_back来创建,而是可以通过array初始化。这里的去重有一个缺点,就是需要先进行排序,也就是会改变原先vector的结构。(9)replace()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void ReplaceVector() int array = 2, 4, 6, 8, 9; vector myVector(array, array + sizeof(array) / sizeof(int); cout 替换之前的序列:; PrintVector(myVector); replace(myVector.begin(), myVector.end(), 8, 888); cout 替换之后的序列:; PrintVector(myVector); replace会查找原先序列中是否有某个数,若存在,则会进行替换。(10)remove()cpp view plain copy print?在CODE上查看代码片派生到我的代码片/ 删除操作和去重操作是类似的,实际使用remove的时候,并没有删除那个元素,而是用后面的那个 / 元素替代了想要删除的元素。最后要使用erase方法删除。 / 但是只能删除第一次出现的那个数字,而第二个元素不可删除。 void RemoveVector() int array = 1, 2, 3, 4, 5; vector myVector(array, array + sizeof(array) / sizeof(int); cout 删除元素前的序列:; PrintVector(myVector); vector:iterator Iter = remove(myVector.begin(), myVector.end(), 4); myVector.erase(Iter); cout 删除元素前的序列:; PrintVector(myVector); 删除vector中的某个元素,首先使用迭代器来进行定位,然后使用erase进行擦除。注意,只能删除第一次出现的该数字,第二次出现的该数组则不能被删除。(11)for-each()cpp view plain copy print?在CODE上查看代码片派生到我的代码片/ 遍历序列中的每个元素,然后去执行某个方法 void ForEach() int array = 3, 5, 7, 9, 1; vector myVector(array, array + sizeof(array) / sizeof(int); cout for-each之前的序列:; PrintVector(myVector); for_each(myVector.begin(), myVector.end(), PrintElement); cout for-each之后的序列:; PrintVector(myVector); / 传引用,就可以改变原序列 void PrintElement(int &ele) ele = ele * ele; for-each是对序列中的每个元素进行快速遍历,然后在遍历过程中对每个元素执行一定的操作,示例代码中是对每个元素求平方,这样就可以改变原序列。(12)count()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void CountVector() int array = 4, 4, 6, 9, 0, 0, 0; vector myVector(array, array + sizeof(array) / sizeof(int); / 这里默认返回的是long long num = count(myVector.begin(), myVector.end(), 0); cout 某个值出现的次数为: num endl; count用于计算某个值出现的次数。(13)copy()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void CopyVector() int arr = 2, 3, 4, 5, 6; vector myVector(arr, arr + sizeof(arr) / sizeof(int); / 这里需要指定大小 vector myVectorCopy(5); copy(myVector.begin(), myVector.end(), myVectorCopy.begin(); cout 拷贝后的序列为:; PrintVector(myVctorCopy); 可以根据原有的序列复制出一个新的序列,需要事先指定大小。(14)generate()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void GenerateVector() vector myVector(6); generate(myVector.begin(), myVector.end(), rand); cout 生成的随机序列为:; PrintVector(myVector); generate可以生成指定大小的随机序列。(15)move()cpp view plain copy print?在CODE上查看代码片派生到我的代码片void MoveVector() int arr = 4, 6, 8, 2, 0; vector myVector(arr, arr + sizeof(arr) / sizeof(int); vector myVectorMove(10); / 初始值为0 move(myVector.begin(), myVector.end(), myVectorMove.begin() + 5); cout 移动后的序列为:; PrintVector(myVectorMove); 可以把序列向前或向后移动若干个位置,空位用0补。(16)fill()cpp view plain copy print?在CODE上查看代码片派生到我的代码片/* * vector的初始化可以用array,也可以直接用. */ void FillVector() vector myVector3, 4, 5, 6, 7; cout 初始的序列为:; PrintVector(myVector); / 数据全部填充为* fill(myVector.begin(), myVector.end(), 99); cout 填充后的序列为:; PrintVector(myVector); 可以把序列指定位置范围内的元素使用某个数字进行填充。(17)rotate()cpp view plain copy print?在CODE上查看代码片派生到我的代码片/ rorate函数将first, middle)内的元素和middle, last)内的元素互换,middle所指元素成为容器的第一个元素。 void RotateVector() vector myVector4, 5, 0, 1, 9; cout 旋转前的序列为:; PrintVector(myVector); rotate(myVector.begin(), myVector.begin() + 3, myVector.end(); cout 旋转后的序列为:; PrintVector(myVector); 从序列的某个位置起进行翻转。(18)关于堆的操作cpp view plain copy print?在CODE上查看代码片派生到我的代码片/ 关于堆的操作 void Heap() int arr = 3, 7, 9, 1, 0, 6; vector myVector(arr, arr + sizeof(arr) / si

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论