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 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
/*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 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
*/
#include
#include
#include
#include
#include
using namespace std;
int main()
{
list ilist;
for (int i = 0; i < 10; ++i)
ilist.push_back(i);
for (list::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?