讲一些算法的知识点——(1)
在c++中有许多的库函数供我们使用,虽然说我们用不到那么多的函数,但是有些常用的函数多了解了解还是很有必要的。
//我们按住键盘的ctrl然后用鼠标左键单击某个函数名称就可以去查看这个函数的详细情况了
1.sort函数
在#include <algorithm>库里面
//对于vector容器元素排序方法如下
sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
@举列子:
vector<int> a2 = {1,1,3,2,4,2,1,1,5,6,0,9,1,1,6,8,9,3,5};
//排序(默认升序排序)
sort(a2.begin(),a2.end());
vector<int> a2 = {1,1,3,2,4,2,1,1,5,6,0,9,1,1,6,8,9,3,5};
//排序(默认升序排序)
sort(a2.begin(),a2.end());
//sort对于数组排序
注意事项:
1. std::sort函数原型:void sort(RandomIt first, RandomIt last);
2. first:指向要排序的序列的第一个元素的迭代器(对于数组,就是数组的起始地址)。
3. last:指向要排序的序列的最后一个元素之后一个位置的迭代器(对于数组,就是数组的结束地址,即arr + n)。
4. 数组的迭代器:在C++中,数组名可以作为指针使用,指向数组的第一个元素。arr + n则指向数组最后一个元素的下一个位置,这符合std::sort函数对迭代器范围的要求。
要使用的是地址
@举例子
int a[4] = {2,3,5,1};
sort(a,a+4);
for(int x:a){
cout<< x<<endl;
}
2. unique函数
在#include <algorithm>库里面
unique(_ForwardIterator __first, _ForwardIterator __last,
_BinaryPredicate __binary_pred)
注意事项:
1.需要先排序:由于 unique 只去除相邻的重复元素,因此在使用 unique 之前通常需要先对序列进行排序。
2.返回值的使用:unique 返回的迭代器指向 去重 后最后一个有效元素的下一个位置,可以使用 erase 方法删除多余的元素。
3.自定义比较函数:可以提供一个自定义的比较函数来定义元素是否相等
@举例子
vector<int> a2 = {1,1,3,2,4,2,1,1,5,6,0,9,1,1,6,8,9,3,5};
//排序
sort(a2.begin(),a2.end());
//删除
auto new_first = unique(a2.begin(),a2.end());
通常使用 auto 作为unique函数的返回类型。
3.erase函数
可以用来删除指定范围的数据
erase(const_iterator __first, const_iterator __last)
@举例子
vector<int> a2 = {1,1,3,2,4,2,1,1,5,6,0,9,1,1,6,8,9,3,5};
//排序
sort(a2.begin(),a2.end());
//删除
auto new_first = unique(a2.begin(),a2.end());
a2.erase(new_first,a2.end());
for(int x:a2){
cout<<x<<" ";
}
//这个与上面的结合使用,删除数据中的重复元素,并打印输出
//可以归纳为一句话a2.erase(unique(a2.begin(),a2.end()),a2.end());
其实我一次讲了这三个函数,还放的这么紧凑,肯定是有原因的,这些函数放一起就可以实现一个功能:完成排序并删除一堆数里面的重复的数字。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> a = {1,2,1,1,3,4,5,6,7,1,1,2,3};
//先排序
sort(a.begin(),a.end());
//再利用unique将重复的数字放到最后,然后返回一个新的末尾
auto x = unique(a.begin(),a.end());
//从新末尾到原来末尾的数据(就是重复的数据)全部删除
a.erase(x,a.end());
//利用范围循环输出结果
for(int i : a){
cout << i << " ";
}
return 0;
}
上面这段代码就完成了查重,删除重复,排序这些功能....
本期内容到这里就结束啦@^0^@
欢迎小伙伴们评论区讨论,提问。
我是荒古前,期待你的关注~~~
~~~完结撒花✌y( •̀ ω •́ )y✌~~~