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; }

cb37a-_c++_STL_算法_复制元素copy_copy_backward的更多相关文章

  1. cb51a_c++_STL_算法_根据第n个元素排序nth_element

    cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:pa ...

  2. cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort

    cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort sort(b,e) sort(b,e,p) stable_sort(b,e) stable_sort(b,e,p) ...

  3. cb26a_c++_STL_算法_元素计数

    cb26a_c++_STL_算法_元素计数所有容器都可以使用countcount_if关联容器的等效成员函数,容器自己的成员函数速度较快1.set.count2.multiset.count3.map ...

  4. cb50a_c++_STL_算法_局部排序partial_sort

    cb50a_c++_STL_算法_局部排序partial_sort partial_sort(b,se,e)排序一部分,begin,source end,endcout << " ...

  5. cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition

    cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition random_shuffle()//重排,随机重排,打乱顺序 partition()分区,把 ...

  6. cb46a_c++_STL_算法_逆转和旋转reverse_rotate函数advance

    cb46a_c++_STL_算法_逆转和旋转reverse_rotateSTL算法--变序性算法reverse() 逆转reverse_copy()一边复制一般逆转rotate()旋转,某个位置开始前 ...

  7. cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if

    cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if remove_copy()//在复制过程中删除一些数据remove_copy_if() 删除性算法: ...

  8. cb43a_c++_STL_算法_删除_(1)remove_remove_if

    cb43a_c++_STL_算法_删除_(1)remove_remove_ifremove()remove_if() 注意:1.并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素,元素个数并没 ...

  9. cb42a_c++_STL_算法_替换_replace

    cb42a_c++_STL_算法_替换_replacereplace(b,e,ov,nv),ov,old value, nv,new valuereplace_if(b,e,p,v) 根据p的条件,全 ...

随机推荐

  1. PHP目录操作函数汇总

    一.判断普通文件和目录    1.is_file()//判断给定文件名是否为一个正常的文件    2.is_dir()//判断给定文件名是否是一个目录二.文件的属性    1.file_exists( ...

  2. SqlServer2008查询性能优化_第一章

  3. 域对象的作用范围 & 请求的转发和重定向

    1. 和属性相关的方法: ①. 方法 void setAttribute(String name, Object o): 设置属性 Object getAttribute(String name): ...

  4. NIO 的非阻塞式网络通信

    1.阻塞与非阻塞   ①  传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read() 或 write()时, 该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务. 因 ...

  5. SourceTree 配置 GitLab

    生成SSH 创建SSH,执行ssh-keygen -t rsa -C "youremail@example.com",会在.ssh目录下生成id_rsa.id_rsa.pub两个私 ...

  6. 我天!xx.equals(null) 是什么骚操作??

    问题背景 我的天,最近做 Code Review 看到一个同事的骚操作,他写了一个工具类,大概是这样的: public static boolean isNull(Object object){ re ...

  7. Spring AMQP:RabbitTemplate SimpleMessageListenerContainer

    一.RabbitTemplate介绍 RabbitTemplate:消息模板,在与Spring AMQP整合时,进行发送消息的关键类. 包括了可靠性投递消息方法.回调监听消息接口ConfirmCall ...

  8. Java实现 LeetCode 834 树中距离之和(DFS+分析)

    834. 树中距离之和 给定一个无向.连通的树.树中有 N 个标记为 0-N-1 的节点以及 N-1 条边 . 第 i 条边连接节点 edges[i][0] 和 edges[i][1] . 返回一个表 ...

  9. Java实现 LeetCode 822 翻转卡片游戏(暴力)

    822. 翻转卡片游戏 在桌子上有 N 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样). 我们可以先翻转任意张卡片,然后选择其中一张卡片. 如果选中的那张卡片背面的数字 X ...

  10. ASP.NET使用HttpHandler进行页面静态化(自动生成页面)

    这次的Demo是,一个根页面,点击链接创建子页面,子页面都是一个Template页面进行替换的 一个根页面 <%@ Page Language="C#" AutoEventW ...