STL 中元素拷贝和替换相关算法

copy

①.头文件

copy 算法定义在头文件 #include 中。

②.算法作用

copy 算法作用是把指定范围的迭代器的元素拷贝到指定的区间。

③.代码示例

vector<int> vec = { 1,2,5,9,5,4,3 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

vector<int> vec2;
copy(vec.begin(), vec.begin()+5, back_inserter(vec2));

cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

copy_if

①.头文件

copy_if 算法定义在头文件 #include 中。

②.算法作用

copy_if 算法作用是在指定范围的区间中按指定的规则筛选元素,并拷贝到指定的区间。

③.代码示例

vector<int> vec = { 1,2,3,4,5 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

vector<int> vec2;
copy_if(vec.begin(), vec.end(), back_inserter(vec2), [](int i) {return i > 2; });

cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

reverse_copy

①.头文件

reverse_copy 算法定义在头文件 #include 中。

②.算法作用

reverse_copy 算法作用是把指定范围的迭代器的元素以相反的顺序拷贝到指定的区间。

③.代码示例

vector<int> vec = { 1,2,3,4,5 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

vector<int> vec2;
reverse_copy(vec.begin(), vec.begin() + 5, back_inserter(vec2));

cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

copy_backward

①.头文件

copy_backward 算法定义在头文件 #include 中。

②.算法作用

copy_backward 算法需要指定目的区间的末尾迭代器,序列以倒序的方式拷贝指定区间的末尾。

③.代码示例

vector<int> vec = { 1,2,3,4,5 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

vector<int> vec2(10,0);
copy_backward(vec.begin(), vec.end(), vec2.end());

cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

transform

①.头文件

transform 算法定义在头文件 #include 中。

②.算法作用

transform 算法作用是把指定范围的迭代器的元素用指定的函数处理后把结果拷贝到指定的区间。

③.代码示例

vector<int> vec = { 1,2,5,9,5,4,3 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

vector<int> vec2;
transform(vec.begin(), vec.end(), back_inserter(vec2), [](int i) { return i + 10; });

cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

replace

①.头文件

replace 算法定义在头文件 #include 中。

②.算法作用

replace 算法作用是把指定范围中指定的旧元素替换成新元素。

③.代码示例

vector<int> vec = { 1,2,5,9,5,4,3 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

replace(vec.begin(), vec.end(), 5, 9);
cout << endl << "新序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

replace_if

①.头文件

replace_if 算法定义在头文件 #include 中。

②.算法作用

replace_if 算法是 replace 的升级版,可以传入一个一元谓词,作用是在指定范围中按指定的条件筛选旧元素替换成新元素。

③.代码示例

 vector<int> vec = { 1,2,5,9,5,4,3 };
 cout << "原序列:" << endl;
 for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

 replace_if(vec.begin(), vec.end(), [](int i) {return i < 4; }, 0);
 cout << endl << "新序列:" << endl;
 for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

replace_copy

①.头文件

replace_copy 算法定义在头文件 #include 中。

②.算法作用

replace_copy 算法作用是把指定范围中指定的旧元素替换成新元素,但是不改变原序列,而是把替换后的结果拷贝到一个新序列。

③.代码示例

vector<int> vec = { 1,2,3,4,5 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

vector<int> vec2;
replace_copy(vec.begin(), vec.end(), back_inserter(vec2), 4,9 );

cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

swap

①.头文件

swap 算法定义在头文件 #include 中。

②.算法作用

swap 算法的作用是交换两个对象的值,也可以是两个容器的值。

③.代码示例

vector<int> vec1 = { 1,2,3,4 };
 vector<int> vec2 = { 4,5,6 };

 cout << "原序列 vec1:" << endl;
 for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
 cout << endl << "原序列 vec2:" << endl;
 for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

 swap(vec1, vec2);
   
 cout << endl << "新序列 vec1:" << endl;
 for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
 cout << endl << "新序列 vec2:" << endl;
 for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

swap_ranges

①.头文件

swap_ranges 算法定义在头文件 #include 中。

②.算法作用

swap_ranges 算法的作用是对两个序列中指定范围的元素进行交换。

③.代码示例

vector<int> vec1 = { 1,2,3,4 };
vector<int> vec2 = { 5,6,7,8 };

cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

swap_ranges(vec1.begin()+2, vec1.end(),vec2.begin()+2);

cout << endl << "新序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "新序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值