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