【C++常用算法】STL基础语法学习 | 拷贝算法&替换算法

简介: 将容器内指定范围的元素拷贝到另一容器中

●copy


1.功能描述:


       将容器内指定范围的元素拷贝到另一容器中


2.查看copy定义下底层代码的函数原型:

ee8571c5ce0ee38f27c6946fa72b0889_1617fe85cd7041b58a17ce58140331b7.png

3.向deque容器中插入10~50五个数,将这五个数拷贝到另一个指定容器中并输出。

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
void printdeque(int value)
{
  cout << value << " ";
}
void text()
{
  deque<int>d;
  d.push_back(10);
  d.push_back(20);
  d.push_back(30);
  d.push_back(40);
  d.push_back(50);
  for_each(d.begin(), d.end(), printdeque);
  cout << endl;
  deque<int>d1;
  d1.resize(d.size());
  copy(d.begin(),d.end(),d1.begin());
  for_each(d1.begin(),d1.end(),printdeque);
}
int main()
{
  text();
}

bc403fbd57b91216623202d5e6f0bb8f_fffc00ab65234375a3d59ba20ed58d55.png


●replace


1.功能描述:


       将容器内指定的旧元素改为新元素


2.查看replace定义下底层代码的函数原型:

25e6b52e5e1795e7ed85d9653dcb71d7_e1f289eb4dde446b956c873314e72736.png

3.向deque容器中插入1~10十个元素,使用replace算法去指定容器中已有的旧元素和将要替换旧元素的新元素并输出。

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
void printdeque(int value)
{
  cout << value << " ";
}
void replace_func(deque<int>&d1)
{
  cout << "请输入要修改的旧值:";
  int n_old; cin >> n_old;
  cout << "请输入要修改的新值:";
  int n_new; cin >> n_new;
  replace(d1.begin(), d1.end(), n_old, n_new);
  cout << "替换后:";
  for_each(d1.begin(), d1.end(), printdeque);
}
void text()
{
  deque<int>d1;
  for (int i = 1; i <= 10; i++)
  {
  d1.push_back(i);
  }
  cout << "替换前:";
  for_each(d1.begin(),d1.end(),printdeque);
  cout << endl;
  replace_func(d1);
}
int main()
{
  text();
}

ba7a309f87cfbebc1243f8037916d560_e092f42e2318403ab9fd04bc600729e2.png


●replace_if


1.功能描述:


       将容器内满足条件的元素,替换成指定元素


2.查看replace_if定义下底层代码的函数原型:

6bcd68e7a2f63011ce45dd22a2c581b7_c7475ce5e33e47ee997acf959646585a.png

3.向deque容器中插入1~10十个元素,使用replace_if条件替换算法去指定一个大于6的条件谓词,输入指定将要替换旧元素的新元素并输出。

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
void printdeque(int value)
{
  cout << value << " ";
}
class compare {
public:
  bool operator()(const int value)
  {
  return value > 6;
  }
};
void replace_if_func(deque<int>&d)
{
  cout << "请输入要修改的新值:";
  int n_new; cin >> n_new;
  replace_if(d.begin(),d.end(),compare(),n_new);
  cout << "替换后:";
  for_each(d.begin(), d.end(), printdeque);
}
void text()
{
  deque<int>d;
  for (int i = 1; i <= 10; i++)
  {
  d.push_back(i);
  }
  cout << "替换前:";
  for_each(d.begin(),d.end(),printdeque);
  cout << endl;
  replace_if_func(d);
}
int main()
{
  text();
}

3387724721c139f895dc1f12435c47d5_99176126df1b4e18a8d557e1dd23bd28.png


●swap


1.功能描述:


       互换两个容器的元素(同类型容器)


2.查看swap定义下底层代码的函数原型:

ef9be0ec0974fd1417dc16ee9a057a5c_e13e9f56ae894426a00153d1301bac39.png

3.分别向deque容器中插入1~10和11~20,使用swap交换算法交换两容器中前后的内容并且输出。


#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
void printdeque(int value)
{
  cout << value << " ";
}
void swap_func(deque<int>&d1, deque<int>&d2)
{
  cout << "交换前" << endl;
  swap(d1, d2);
  cout << "d1:"; for_each(d1.begin(), d1.end(), printdeque);
  cout << endl;
  cout << "d2:"; for_each(d2.begin(), d2.end(), printdeque);
  cout << endl;
}
void text()
{
  deque<int>d1;
  deque<int>d2;
  for (int i = 1, j = 1, k=11; i <= 10; i++, j++,k++)
  {
  d1.push_back(j);
  d2.push_back(k);
  }
  cout << "交换前"<<endl;
  cout << "d1:"; for_each(d1.begin(),d1.end(),printdeque);
  //1 2 3 4 5 6 7 8 9 10
  cout << endl;
  cout << "d2:"; for_each(d2.begin(),d2.end(),printdeque);
  //11 12 13 14 15 16 17 18 19 20
  cout << endl;
  swap_func(d1,d2);
}
int main()
{
  text();
}

88d2dacae3b7aa1e19e09698562f7561_bd139312fc26493492284d13f7c56e36.png

目录
相关文章
|
11天前
|
C++
c++的学习之路:27、红黑树
c++的学习之路:27、红黑树
28 4
|
11天前
|
存储 C++ 容器
c++的学习之路:26、AVL树
c++的学习之路:26、AVL树
26 0
|
4天前
|
编译器 C语言 C++
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
13 0
|
9天前
|
存储 缓存 算法
C++从入门到精通:4.6性能优化——深入理解算法与内存优化
C++从入门到精通:4.6性能优化——深入理解算法与内存优化
|
9天前
|
存储 算法 程序员
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
|
9天前
|
C++
C++从入门到精通:2.1.2函数和类——深入学习面向对象的编程基础
C++从入门到精通:2.1.2函数和类——深入学习面向对象的编程基础
|
10天前
|
缓存 网络协议 编译器
针对Android系统工程师的C/C++学习目录
针对Android系统工程师的C/C++学习目录
2 0
|
2天前
|
编译器 C++
【C++】一文全解四种经典 [ 特殊类 ]的设计
【C++】一文全解四种经典 [ 特殊类 ]的设计
|
3天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-3
c++初阶------类和对象(六大默认构造函数的揭破)
|
3天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-2
c++初阶------类和对象(六大默认构造函数的揭破)