第九章(14):STL之常用拷贝和替换算法

news/2024/12/12 22:42:36/

文章目录

  • 前情回顾
  • 常用拷贝算法
    • copy
  • 常用替换算法
    • replace
    • replac_if
    • swap
  • 下一座石碑

🎉welcome🎉
✒️博主介绍:一名大一的智能制造专业学生,在学习C/C++的路上会越走越远,后面不定期更新有关C/C++语法,数据结构,算法,Linux,ue5使用,制作游戏的心得,和大家一起共同成长。
✈️C++专栏:C++爬塔日记
😘博客制作不易,👍点赞+⭐收藏+➕关注

前情回顾

在上一块石碑中,我学到了如何去使用一些常用的排序算法,同时下一块石碑也显露出来…

  • 🚄上章地址:第九章(13):STL之常用排序算法

常用拷贝算法

  • 拷贝算法通常使用的就只有一种:
copy//将容器指定范围之内的数据拷贝到另一个容器当中

copy

  • copy,翻译过来就是拷贝,它的作用也确实是拷贝,将一个容器内的一个区间内的元素拷贝给另一个容器,注意,要提前给要拷贝进去的容器开辟好空间
copy(beg,end,dest);

使用:

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>void print(vector<int>& a)
{for (auto b = a.begin(); b < a.end(); b++){cout << *b << " ";}cout << endl;
}
void test1()
{vector<int> a;for (int i = 0; i < 10; i++){a.push_back(i);}print(a);auto b = a.begin();b++; b++; b++; b++;vector<int> c;c.resize(6);copy(b, a.end(), c.begin());print(c);
}
int main()
{test1();return 0;
}

在这里插入图片描述

常用替换算法

  • 替换算法,其实本质是和拷贝是一样的,拷贝也可以属于替换算法,拷贝过去的元素也就是一个区间内的元素把另一个区间内的元素替换掉了,常用的替换算法有三种:
replace//将指定范围内的元素换成新的元素
replace_if//将指定范围内满足条件的元素替换成新的元素
swap//互换两个容器内的元素

replace

  • replace它的作用是将区间内的指定元素替换成新元素
replace(beg,end,T old,T new)
  • beg是区间的开始迭代器,end为区间结束迭代器,old是要被替换的旧元素,new是替换旧元素的新元素

使用:


#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>void print(vector<int>& a)
{for (auto b = a.begin(); b < a.end(); b++){cout << *b << " ";}cout << endl;
}
void test1()
{vector<int>a;for (int i = 0; i < 10; i++){	a.push_back(i);a.push_back(i);a.push_back(i);}print(a);for (int i = 0; i < 10; i++)replace(a.begin(), a.end(), i, 1);print(a);
}
int main()
{test1();return 0;
}

在这里插入图片描述

replac_if

  • replace_if的作用与replace的作用基本是一致的,但是他它是满足条件的元素替换成新元素
replace_if(beg,end,_pred,T new)
  • beg是区间的开始迭代器,end为区间结束迭代器,_pred是谓词,满足谓词条件的是要被替换的旧元素,new是替换旧元素的新元素

使用:

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>void print(vector<int>& a)
{for (auto b = a.begin(); b < a.end(); b++){cout << *b << " ";}cout << endl;
}
bool big(int a)
{return a > 0;
}
void test1()
{vector<int>a;for (int i = 0; i < 10; i++){a.push_back(i);a.push_back(i);a.push_back(i);}print(a);replace_if(a.begin(), a.end(),big , 1);print(a);
}
int main()
{test1();return 0;
}

在这里插入图片描述

swap

  • swap是交换两个容器内的元素,这里的容器一定是同种的容器
swap(cc1,c2)
  • c1是容器1,c2是容器2

使用:

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>void print(vector<int>& a)
{for (auto b = a.begin(); b < a.end(); b++){cout << *b << " ";}cout << endl;
}
bool big(int a)
{return a > 0;
}
void test1()
{vector<int>a, b;for (int i = 0; i < 10; i++){a.push_back(i);b.push_back(i + 10);}cout << "交换前:" << endl;print(a);print(b);swap(a, b);cout << "交换后:" << endl;print(a);print(b);
}
int main()
{test1();return 0;
}

在这里插入图片描述

下一座石碑

  • 这座石碑倒下了,露出了下一座石碑…

😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔
🚀专栏:C++爬塔日记
🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉


http://www.ppmy.cn/news/22731.html

相关文章

JVM入门知识总结

在学习虚拟机之前我们要知道为什么要学习虚拟机呢?首先就是增加自己的知识,其次就是面试的需要,其实不懂 JVM 也可以照样写出优质的代码&#xff0c;但是不懂 JVM 有可能别被面试官虐得体无完肤.一.虚拟机的概述虚拟机&#xff08;Virtual Machine&#xff09;&#xff0c;就是…

8 个很棒的 Vue 开发技巧

1.路由参数解耦通常在组件中使用路由参数&#xff0c;大多数人会做以下事情。export default {methods: {getParamsId() {return this.$route.params.id}} }在组件中使用 $route 会导致与其相应路由的高度耦合&#xff0c;通过将其限制为某些 URL 来限制组件的灵活性。正确的做…

MySQl学习(从入门到精通 1.5)

MySQl学习&#xff08;从入门到精通 1.5&#xff09;第 08 章_聚合函数1. 聚合函数介绍1. 1 AVG和SUM函数1. 2 MIN和MAX函数1. 3 COUNT函数2. 1 基本使用2. 2 使用多个列分组2. 3 GROUP BY中使用WITH ROLLUP3. HAVING3. 1 基本使用3. 2 WHERE和HAVING的对比4. SELECT的执行过程…

我的网站上线了!

最近有段时间没有写原创文章了&#xff0c;恰好这两天正在翻阅历史文章的时候&#xff0c;发现文章中的图片竟然裂了&#xff1f;顿时冒了一身冷汗&#xff0c;因为每逢遇到这种情况&#xff0c;动辄需要花费一周的时间迁移图片。。。。。。 当我直接访问图片 url 的时候&#…

一文速学-Pandas数据展示选项设置详解+实例代码操作展示

目录 前言 一、获取数据展示参数 二、可选展示选项 1.describe_option&#xff08;&#xff09; 2.get_option()/set_option() 3.reset_option() 4. option_context&#xff08;&#xff09; 三、 在Python/IPython环境中设置启动选项 四、常用选项 1.display.max_rows…

【自学Docker】Docker login logout

大纲 Docker login & logout docker login命令 docker login 命令用于登陆到一个 Docker镜像仓库&#xff0c;如果未指定镜像仓库地址&#xff0c;默认为官方仓库 Docker Hub。 如果用户使用 docker login 命令登录官方仓库&#xff0c;首先我们需要在官方仓库注册一个账…

基于 Mac 通过 VMware-Fusion 在 Kylin-Server-10-SP2 上部署 DM8 数据库

在 Kylin-Server-10-SP2 上部署 DM8 数据库背景安装所需资源下载安装 VMware-Fusion安装 Kylin-Server安装 DM8背景 主要为达梦数据库认证管理员培训&#xff0c;提供练习实操环境。 达梦数据库管理员的培训内容包括&#xff1a; 达梦数据库的安装、建库、用户权限管理、备份、…

【重庆邮电大学协办】2023年第六届数据挖掘与知识发现国际会议(DMKD 2023)

2023年第六届数据挖掘与知识发现国际会议(DMKD 2023) 重要信息 会议网址&#xff1a;www.icdmkd.org 会议时间&#xff1a;2023年6月24-26日 召开地点&#xff1a;中国-重庆 截稿时间&#xff1a;2023年5月24日 录用通知&#xff1a;投稿后2周内 收录检索&#xff1a;EI…