cb37a-_c++_STL_算法_复制元素copy_copy_backward

copy(),同一个容器内部区间的拷贝,或者容器与容器之间的拷贝
copy_backward()//向后copy

注意:
1.没有copy_if算法,可以使用remove_copy_if()算法
2.复制过程中要逆转元素次序,使用reverse_copy()算法
3.把容器内所有元素赋值给另一个容器,要使用赋值操作符或者容器的assign()成员函数
4.复制工程中删除某些元素,使用remove_copy()和remove_copy_if()算法
5.复制中改变元素,使用transform()或者replace_copy()算法

STL算法-修改性算法
for_each()
copy()
copy_backward()
transform()
merge()
swap_ranges()
fill()
fill_n()

generate()
generate_n()
replace()
replace_if()
replace_copy()
replace_copy_if()

---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed!

Program: D:\Users\txwtech\projects\cb37a\Debug\cb37a.exe
File: d:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\vector
Line: 94

Expression: can't decrement vector iterator before begin

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

---------------------------
中止(A) 重试(R) 忽略(I)
---------------------------

copy_backward(ilist.begin(), ilist.end(), ivec.begin());
copy_backward的最后一个参数需要从最后往前面拷贝数据,所以应该是ivec.end().

Expression: can't decrement vector iterator before begin
意思就是指针溢出了,ivec.begin()之前的数据,就超出范围。
copy_backward是从ivec.end()的前一个数开始copy. ivec.end()是指向最后一个的下一个。

---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed!

Program: D:\Users\txwtech\projects\cb37a\Debug\cb37a.exe
File: d:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\list
Line: 187

Expression: cannot dereference end list iterator

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

---------------------------
中止(A) 重试(R) 忽略(I)
---------------------------
Expression: cannot dereference end list iterator,空的容器就会出问题。
使用list迭代器,先定义容量。
比如:list<int> ilist(20);//默认20个0,
copy(ivec.begin(), ivec.end(), ilist2.begin());
copy到ilist必须要保证ilist有足够的空间。
或者使用back_inserter
copy(ivec.begin(), ivec.end(), back_inserter(ilist));//这样就不用考虑容器容量问题

rror C2065: “ostream_iterator”: 未声明的标识符,需要包含:#include <iterator>

 /*cb37a-_c++_STL_算法_复制元素copy_copy_backward

 copy(),同一个容器内部区间的拷贝,或者容器与容器之间的拷贝
copy_backward()//向后copy 注意:
1.没有copy_if算法,可以使用remove_copy_if()算法
2.复制过程中要逆转元素次序,使用reverse_copy()算法
3.把容器内所有元素赋值给另一个容器,要使用赋值操作符或者容器的assign()成员函数
4.复制工程中删除某些元素,使用remove_copy()和remove_copy_if()算法
5.复制中改变元素,使用transform()或者replace_copy()算法 STL算法-修改性算法
for_each()
copy()
copy_backward()
transform()
merge()
swap_ranges()
fill()
fill_n() generate()
generate_n()
replace()
replace_if()
replace_copy()
replace_copy_if() ---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed! Program: D:\Users\txwtech\projects\cb37a\Debug\cb37a.exe
File: d:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\vector
Line: 94 Expression: can't decrement vector iterator before begin For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) ---------------------------
中止(A) 重试(R) 忽略(I)
--------------------------- copy_backward(ilist.begin(), ilist.end(), ivec.begin());
copy_backward的最后一个参数需要从最后往前面拷贝数据,所以应该是ivec.end(). Expression: can't decrement vector iterator before begin
意思就是指针溢出了,ivec.begin()之前的数据,就超出范围。
copy_backward是从ivec.end()的前一个数开始copy. ivec.end()是指向最后一个的下一个。 ---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed! Program: D:\Users\txwtech\projects\cb37a\Debug\cb37a.exe
File: d:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\list
Line: 187 Expression: cannot dereference end list iterator For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) ---------------------------
中止(A) 重试(R) 忽略(I)
---------------------------
Expression: cannot dereference end list iterator,空的容器就会出问题。
使用list迭代器,先定义容量。
比如:list<int> ilist(20);//默认20个0,
copy(ivec.begin(), ivec.end(), ilist2.begin());
copy到ilist必须要保证ilist有足够的空间。
或者使用back_inserter
copy(ivec.begin(), ivec.end(), back_inserter(ilist));//这样就不用考虑容器容量问题 rror C2065: “ostream_iterator”: 未声明的标识符,需要包含:#include <iterator> */ #include <iostream>
#include <algorithm>
#include <vector>
#include <list>
#include <iterator> using namespace std; int main()
{
list<int> ilist;
for (int i = ; i < ; ++i)
ilist.push_back(i);
for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
cout << *iter << ' ';
cout << endl; vector<int> ivec(ilist.size()*);
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl; copy(ilist.begin(), ilist.end(), ivec.begin());
cout << "copy后的数据" << endl;
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl;
//copy_backward的最后一个参数一定是ivec.end().
copy_backward(ilist.begin(), ilist.end(), ivec.end());
cout << "copy_backward后的数据" << endl; // for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl; //例子2
vector<int> ivec2;
list<int> ilist2();//默认分配空间,20个0;
for (int i = ; i <= ; ++i)
ivec2.push_back(i);
copy(ivec2.begin(), ivec2.end(), ilist2.begin()); for (list<int>::iterator iter = ilist2.begin(); iter != ilist2.end(); ++iter)
cout << *iter << ' ';
cout << endl; cout << "copy拷贝到输出流里面" << endl;
copy(ivec2.begin(), ivec2.end(), ostream_iterator<int>(cout," "));
cout << endl; cout << "rbegin()逆向迭代器拷贝" << endl;
copy(ivec2.rbegin(), ivec2.rend(), ilist2.begin());
for (list<int>::iterator iter = ilist2.begin(); iter != ilist2.end(); ++iter)
cout << *iter << ' ';
cout << endl; return ;
}
 /*cb37b_c++_

 */

 #include <iostream>
#include <algorithm>
#include <vector> using namespace std; int main()
{ vector<char> source(, '.');
for (char c = 'a'; c <= 'f'; c++)
{
source.push_back(c);
}
source.insert(source.end(), , '.'); for (vector<char>::iterator iter = source.begin(); iter != source.end(); ++iter)
cout << *iter << ' ';
cout << endl; vector<char> c1(source.begin(), source.end());
copy(c1.begin() + , c1.begin() + , c1.begin() + );
//自己对自己容器修改
/*
. . . . . . . . . . a b c d e f . . . . . . . . . .
. . . . . . . a b c d e f d e f . . . . . . . . . .
把a b c d e f从索引7开始拷贝,覆盖。 */
for (vector<char>::iterator iter = c1.begin(); iter != c1.end(); ++iter)
cout << *iter << ' ';
cout << endl; vector<char> c2(source.begin(), source.end());
copy_backward(c2.begin() + , c2.begin() + , c2.begin() + );
//从f开始拷贝,从右边,最后面开始拷贝的。
for (vector<char>::iterator iter = c2.begin(); iter != c2.end(); ++iter)
cout << *iter << ' ';
cout << endl; }

最新文章

  1. [LeetCode] Reorder List 链表重排序
  2. C#脚本引擎 CS-Script 之(一)——初识
  3. 【C语言】07-基本语句和运算
  4. JS获取系统的指定定年月日
  5. firefox 自定义快捷键
  6. AngularJS with MVC4 CRUD
  7. bzoj 3823: 定情信物 线性筛逆元
  8. HTML5学习总结——HTML5入门与新增标签
  9. HDU 5479 Scaena Felix
  10. 基于Casperjs的网页抓取技术【抓取豆瓣信息网络爬虫实战示例】
  11. 【dedecms】DEDE列表页调用文章内容第一张图片(非缩略图)方法
  12. linux centos6.8 下安装mysql 步骤
  13. [LeetCode] Remove Comments 移除注释
  14. ECMA Script 6_对象的扩展
  15. Squid实现正向代理及访问控制--技术流ken
  16. 【BZOJ4872】【SHOI2017】分手是祝愿 期望DP
  17. eclipse添加maven环境
  18. chrome 浏览器 console 加入 jquery 测试调试 一介布衣
  19. AS3在函数内部移除监听(arguments.callee)
  20. 回首C语言关键字(~回首向来萧瑟处~)

热门文章

  1. NodeJS——大汇总(一)(只需要使用这些东西,就能处理80%以上业务需求,全网最全node解决方案,吐血整理)
  2. ReentrantLock解析及源码分析
  3. shell script的简单使用
  4. 和付费网盘说再见,跟着本文自己起个网盘(Java 开源项目)
  5. 初步理解 MySQL数据库
  6. Java实现第七届蓝桥杯国赛 赢球票
  7. Java实现 蓝桥杯VIP 算法提高 最长公共子序列
  8. SQL Server实现 LeetCode 178 分数排名
  9. Java实现 蓝桥杯VIP 算法提高 聪明的美食家
  10. Java实现 LeetCode 128 最长连续序列