当前位置: 首页 > article >正文

讲一些算法的知识点——(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✌~~~


http://www.kler.cn/a/505619.html

相关文章:

  • 《机器学习》——DBSCAN算法
  • 【无标题】
  • 1.1.1 C语言常用的一些函数(持续更新)
  • Python文件操作中编码解码问题
  • C++算法第十五天
  • 中台成熟度模型有什么用
  • Linux TA_Lib安装
  • 智能科技与共情能力加持,哈曼重新定义驾乘体验
  • TCP/IP协议簇及封装与解封装
  • C#中的Span
  • 代码随想录算法训练营第 8 天(字符串1)| 344.反转字符串 541. 反转字符串II 卡码网54.替换数字
  • HTML5 网站模板
  • 2025-1-15-十大经典排序算法 C++与python
  • 网络安全10大漏洞
  • 超燃预告!Origin百图绘制系列即将登场
  • 不同的embedding技术效果评价
  • kafka的listeners和advertised.listeners,配置内外网分流
  • Natural Language-Assisted Multi-modal Medication Recommendation
  • go语言实现UTF8与GB2312内码转换
  • Node.js、Vue 和 React 的关系和区别
  • 一文掌握Docker
  • Ubuntu-Install-Ros2
  • MySQL 排除指定时间内重复记录的解决方案
  • VSCode连接远程docker环境
  • 宝塔面板 申请证书后 仍然提示不安全
  • 神经网络:什么是交叉熵?