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

C++ STL iter_swap用法和实现

一:功能

        交换两个迭代器指向的元素值,一般用在模板中

二:使用

#include <vector>
#include <iostream>template <typename It, typename Cond>requires std::forward_iterator<It> && std::indirectly_swappable<It,It> && std::predicate<Cond, It>
auto partition(It first, It last, Cond cond) {while (first != last && cond(first)) ++first;if (first == last) return last;for (auto it = std::next(first); it != last; it++) {if (!cond(it)) continue;std::iter_swap(it, first);++first;}return first;
}int main() {std::vector<int> data{1, 2, 3, 4, 5, 6, 7, 8, 9};partition(data.begin(), data.end(), [](auto it) {return *it % 2 == 0;});for (auto v : data) {std::cout << v << " ";}std::cout << "\n";
}

三:实现

#include <algorithm>
#include <iostream>
#include <random>
#include <string_view>
#include <vector>template<class ForwardIt1, class ForwardIt2>
constexpr //< since C++20
void my_iter_swap(ForwardIt1 a, ForwardIt2 b)
{using std::swap;swap(*a, *b);
}template<class ForwardIt>
void selection_sort(ForwardIt begin, ForwardIt end)
{for (ForwardIt it = begin; it != end; ++it)my_iter_swap(it, std::min_element(it, end));
}void println(std::string_view rem, std::vector<int> const& v)
{std::cout << rem;for (int e : v)std::cout << e << ' ';std::cout << '\n';
}template<int min, int max>
int rand_int()
{static std::uniform_int_distribution dist(min, max);static std::mt19937 gen(std::random_device{}());return dist(gen);
}int main()
{std::vector<int> v;std::generate_n(std::back_inserter(v), 20, rand_int<-9, +9>);std::cout << std::showpos;println("Before sort: ", v);selection_sort(v.begin(), v.end());println("After sort:  ", v);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是何原因?
  • FPGA设计之跨时钟域(CDC)设计篇(2)----如何科学地设计复位信号?
  • Conda:Python环境管理的瑞士军刀
  • Oracle基础以及一些‘方言’(一)
  • 【C++】AVL树(旋转、平衡因子)
  • Python高级(三)_正则表达式
  • 小抄 20240709
  • C++ 【 Open3D 】 点云按高程进行赋色
  • 爱丽丝梦游仙境,把大模型打回原形
  • Git分支结构
  • 衣服、帽子、鞋子相关深度学习数据集大合集(2)
  • android13 rom frameworks 蓝牙自动接收文件
  • Redis数据同步
  • css看见彩虹,吃定彩虹
  • Excel多表格合并
  • Django 博客开发教程 8 - 博客文章详情页
  • js如何打印object对象
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MySQL QA
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关于使用markdown的方法(引自CSDN教程)
  • 好的网址,关于.net 4.0 ,vs 2010
  • 试着探索高并发下的系统架构面貌
  • 通过git安装npm私有模块
  • 学习ES6 变量的解构赋值
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • ​flutter 代码混淆
  • #565. 查找之大编号
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (回溯) LeetCode 77. 组合
  • (九)c52学习之旅-定时器
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三)模仿学习-Action数据的模仿
  • (十二)Flink Table API
  • (算法)N皇后问题
  • (算法)Travel Information Center
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)德国人的记事本
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .net分布式压力测试工具(Beetle.DT)
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [17]JAVAEE-HTTP协议
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [C/C++] C/C++中数字与字符串之间的转换