STL算法篇之拷贝修改类算法

STL算法篇之拷贝修改类算法

  • 拷贝类算法
    • copy与copy_backward
    • remove与remove_copy
    • remove_if与remove_copy_if
  • 修改类算法
    • replace与replace_copy
    • replace_if与replace_copy_if
    • iter_swap与swap与swap_range、
    • unique与unique_copy

拷贝类算法

1.copy 区间拷贝
2.copy_backward 逆向拷贝
3.remove 删除
4.remove_copy 删除另存
5.remove_if 条件删除
6.remove_copy_if 条件删除结果另存

copy与copy_backward

这两个函数的前两个参数,表示被拷贝迭代器的范围,
第三个参数有所区别,
copy的第三个参数是迭代器的初始位置(正向拷贝),
copy_backward的第三个参数是迭代器的末位置(反向拷贝)

意:这里的反向拷贝指的是拷贝的位置反向,不是说将拷贝的数据反向

#include<iostream>
#include<functional>
#include<algorithm>
#include<vector>
#include<array>using namespace std;int main()
{array<int, 4> v1 = { 1, 2, 3,4 };vector<int> v2(v1.size()); //copyvector<int> v3(v1.size()); //copy_backwardcopy(v1.begin(), v1.end(), v2.begin());/*for (auto& v: v2){cout << v;}*/for_each(v2.begin(), v2.end(), [](int& date) {cout << " " << date; });cout << endl;copy_backward(v1.begin(), v1.end(), v3.end());copy(v3.begin(), v3.end(), ostream_iterator<int>(cout, " ")); //copy函数与流型迭代器的结合打印数据return 0;
}

容器数据的打印方法有很多
1.可以用auto关键字的范围for循环
2.可以用for_each()算法
3.可以用copy()函数与流型迭代器相结合
4.可以采用迭代器的方式去打印

remove与remove_copy

注意:这remove删除,并不是真正意义上的删除**(如果想真正意义上的删除,再用一个尾删就行**),他只是把删除的数据覆盖,但是容器元素的个数是没有改变的。

remove_copy 将删除的结果另存,倒是可以做到真正意义上的删除

#include<iostream>
#include<functional>
#include<algorithm>
#include<vector>
#include<array>using namespace std;int main()
{vector<int> v1 = { 1, 2, 3 ,4, 5, 6 };vector<int> v2(v1.size());vector<int> ::iterator it = remove(v1.begin(), v1.end(), 2);for_each(v1.begin(), v1.end(), [](int& date) {cout << date << " "; });return 0;
}

在这里插入图片描述

#include<iostream>
#include<functional>
#include<algorithm>
#include<vector>
#include<array>using namespace std;int main()
{vector<int> v1 = { 1, 2, 3 ,4, 5, 6 };vector<int> v2(v1.size() - 1);vector<int> ::iterator it = remove(v1.begin(), v1.end(), 2);for_each(v1.begin(), v1.end(), [](int& date) {cout << date << " "; });cout << endl;auto it1 = remove_copy(v1.begin(), v1.end(), v2.begin(), 3);for_each(v2.begin(), v2.end(), [](int& date) {cout << date << " "; });return 0;
}

在这里插入图片描述

remove_if与remove_copy_if

#include<iostream>
#include<functional>
#include<algorithm>
#include<vector>
#include<array>using namespace std;int main()
{vector<int> v1 = { 1, 2, 3 ,4, 5, 6 };vector<int> v2(v1.size() - 2);vector<int> ::iterator it = remove_if(v1.begin(), v1.end(), [](int& date) {return date % 2 == 0; });//将所有的偶数覆盖,当然也不是真正意义上的删除,只是单纯的数据覆盖,容器的元素个数不变for_each(v1.begin(), v1.end(), [](int& date) {cout << date << " ";});cout << endl;//真正意义上的删除auto it1 = remove_copy_if(v1.begin(), v1.end(), v2.begin(), [](int& date) {return date % 2 == 0; });for_each(v2.begin(), v2.end(), [](int& date) {cout << date << " "; });return 0;
}

AQ

修改类算法

1.replace 修改
2. replace_copy 修改结果另存
3.replace_if 条件替换
4.replace_copy_if 条件替换,结果另存
5.iter_swap 迭代器交换
6.swap 容器交换
7.swap_range 区间交换
8.unique: 去重操作
unique_copy: 去重结果另存

replace与replace_copy

replace 前两个参数是迭代器范围,第三个参数是容器中要被替换的数据,第四个参数是数据
replace_copy 结果另存,就加了个另存容器的初位置
#include<iostream>
#include<functional>
#include<algorithm>
#include<vector>
#include<array>using namespace std;int main()
{vector<int> v1 = { 1, 2, 3,4, 5, 6 };vector<int> v2(v1.size());replace(v1.begin(), v1.end(), 1, 99);copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));cout << endl;replace_copy(v1.begin(), v1.end(), v2.begin(), 2, 888);copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));return 0;
}

replace_if与replace_copy_if

也就是一个条件替换,条件和一个条件替换另存

#include<iostream>
#include<functional>
#include<algorithm>
#include<vector>
#include<array>using namespace std;int main()
{vector<int> v1 = { 1, 2, 3,4, 5, 6 };vector<int> v2(v1.size());replace_if(v1.begin(), v1.end(), [](int& date) {return date % 2 == 0; }, 99);copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));cout << endl;replace_copy_if(v1.begin(), v1.end(), v2.begin(), [](int& date) {return date % 2 == 0; }, 888);copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));return 0;

iter_swap与swap与swap_range、

#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
#include<list>using namespace std;int main()
{//iter_swap  迭代器的交换  就是将迭代器中元素的位置进行交换//注意;在list容器中,如果用 end() -1 会报错//这个时候,为了解决这一个问题,可以采用  advance()函数,将元素移动 -1个距离//advance的第一个参数是迭代器类型的位置,第二个参数是移动的距离,可以为负数list<int> list1 = { 1, 2, 3, 4, 5 };list<int> ::iterator it = list1.end();advance(it, -1);iter_swap(list1.begin(), it);copy(list1.begin(), list1.end(), ostream_iterator<int>(cout, " "));cout << endl;// swap 迭代器交换//参数为2个容器的对象list<int> list2 = { 99, 99, 2 };cout << "交换前 :";copy(list1.begin(), list1.end(), ostream_iterator<int>(cout, " "));cout << endl;copy(list2.begin(), list2.end(), ostream_iterator<int>(cout, " "));cout << endl;swap(list1, list2);cout << "交换后 :";copy(list1.begin(), list1.end(), ostream_iterator<int>(cout, " "));cout << endl;copy(list2.begin(), list2.end(), ostream_iterator<int>(cout, " "));//swap_ranges  区间交换cout << endl;vector<int> v1 = { 1,23, 4, 5 };vector<int> v2 = { 9, 8 , 7, 6, 5, 4, 3, 2, 1 };swap_ranges(v1.begin(), v1.begin() + 2, v2.begin());for (auto& v : v1){cout << v << " ";}cout << endl;for (auto& v : v2){cout << v << " ";}return 0;
}

unique与unique_copy

#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
#include<list>using namespace std;int main()
{// unique 去重// 注意:这个函数去重,感觉其实挺鸡肋的,因为它不能够将所有元素去重,只能够实现部分去重vector<int> v1 = { 1, 1, 3,4 ,4, 4, 4, 4, 4,5 ,5 ,6 ,6 ,7, 8, 8 };unique(v1.begin(), v1.end());for (auto& v : v1){cout << v << " ";}//unique_copy//unique_copy倒是可以实现所有元素去重//不过去重的元素必须是要有序的,不然就会报错vector<int> v2 = { 1, 1, 3,4 ,4, 4, 4, 4, 4,5 ,5 ,6 ,6 ,7, 8, 8 };vector<int> v3(v2.size());cout << endl;unique_copy(v2.begin(), v2.end(), v3.begin());for (auto& v : v3){cout << v << " ";}return -0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20279.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的恒温恒湿温室大棚温湿度控制系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前温湿度按键设置温湿度报警上限和下限&#xff1b;温度低于下限继电器闭合加热片进行加热&#xff1b;温度超过上限继电器闭合开启风扇进行降温湿度低于下限继电器闭合加湿器进行加湿湿度高于上限继电器闭合开启风扇进行…

6. Springboot快速回顾(集成Dubbo)

Dubbo是实现远程调用的一个框架&#xff0c;阿里巴巴开源的。远程调用就是B服务器可以调用A服务器的方法。大型项目会被拆分成多个模块&#xff0c;部署在不同的服务器上。若将公共模块集中部署在一台服务器上&#xff0c;可以方便其他服务器调用。因此&#xff0c;需要Dubbo。…

MATLAB 的函数计算与作图

基本初等函数的输入系统运算与操作函数的输入函数值的计算1. 数值计算方式2. 符号计算方式2.1 函数&#xff1a;sym2.2 函数&#xff1a;syms 函数的作图1. 一般函数 yf(x) 的作图&#xff08;二维&#xff09;作图基本形式作多重线作图的线型和颜色作图的网格和标记、图例、字…

如何在SQL Server中实现Ungroup操作

概要 我们经常在SQL Server中使用group by语句配合聚合函数&#xff0c;对已有的数据进行分组统计。本文主要介绍一种分组的逆向操作&#xff0c;通过一个递归公式&#xff0c;实现ungroup操作。 代码和实现 我们看一个例子&#xff0c;输入数据如下&#xff0c;我们有一张产…

【新版系统架构】第十七章-通信系统架构设计理论与实践

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 第一章-绪论第二章-计算机系统基础知识&#xff08;一&#xff09;第二章-计算机系统基础知识&#xff08;二&#xff09;第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…

【webrtc】ProcessThreadAttached

RegisterModule 调用所在的线程指针传递给ProcessThreadAttached ProcessThreadAttached 调用不是在worker thread 而是在 registers/deregister 这个module或者 start stop 这个module的时候 ** ** pacedsender是一个moudle -实现了

用Arthas快速定位线上JVM问题!

Arthas分析FullGC问题定位 对于FullGC那一定不会陌生,一般来说会采用横切FullGC前置拦截(-XX:+HeapDumpBeforeFullGC)和后置拦截(-XX:+HeapDumpAfterFullGC),导出FullGC发生前后的heap dump文件,以便于我们进行FullGC原因的分析和定位。 推测分析问题之FullGC的频率过高…

Kubernetes基础知识点

k8s可以看做是一个集群操作系统&#xff0c;能够对容器进行调度和编排。 Kubernetes中的基本对象 pod 是k8s中的最小单位&#xff0c;一个pod封装一个或者多个容器&#xff0c;存储资源。 deployment 是对pod的服务化封装&#xff0c;可以包含一个或多个pod statefulset 为…

【面试题34】什么是MVC,为什么要使用它

文章目录 一、前言二、MVC介绍2.1 模型&#xff08;Model&#xff09;2.2 视图&#xff08;View&#xff09;2.3 控制器&#xff08;Controller&#xff09; 三、MVC模式的优点四、总结 一、前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP面试专区。 计划将全覆盖PHP开发领域…

opencv4.7.0编译opencv-contrib-4.7.0以及CUDA

0、引言 最近工作中需要用到使用CUDA加速后的opencv进行传统算法的开发&#xff0c;在编程之前&#xff0c;需要先解决环境编译和lib库问题&#xff0c;本文就是记录自己编译opencv-4.7.0的全过程。 1、CUDA下载和安装 可参考我之前的博客WIN10安装配置TensorRT详解中的前几…

我爱学QT-QT信号和槽

1.给控件改名字 为了分析代码方便&#xff0c;我们要给控件改名字。要通俗易懂。 2.信号和槽 信号&#xff1a;信号就是指控件发出的特定的信号。 比如按钮的信号 槽&#xff1a;槽就是槽函数的意思&#xff0c;我们可以把槽函数绑定在某一个控件的信号上。 3.怎么关联信号…

【无公网IP端口映射】远程访问本地jupyter notebook服务

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…