zoukankan      html  css  js  c++  java
  • 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 xwtechprojectscb37aDebugcb37a.exe
    File: d:program files (x86)microsoft visual studio2017communityvc oolsmsvc14.16.27023includevector
    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 xwtechprojectscb37aDebugcb37a.exe
    File: d:program files (x86)microsoft visual studio2017communityvc oolsmsvc14.16.27023includelist
    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>

      1 /*cb37a-_c++_STL_算法_复制元素copy_copy_backward
      2 
      3 copy(),同一个容器内部区间的拷贝,或者容器与容器之间的拷贝
      4 copy_backward()//向后copy
      5 
      6 注意:
      7 1.没有copy_if算法,可以使用remove_copy_if()算法
      8 2.复制过程中要逆转元素次序,使用reverse_copy()算法
      9 3.把容器内所有元素赋值给另一个容器,要使用赋值操作符或者容器的assign()成员函数
     10 4.复制工程中删除某些元素,使用remove_copy()和remove_copy_if()算法
     11 5.复制中改变元素,使用transform()或者replace_copy()算法
     12 
     13 STL算法-修改性算法
     14 for_each()
     15 copy()
     16 copy_backward()
     17 transform()
     18 merge()
     19 swap_ranges()
     20 fill()
     21 fill_n()
     22 
     23 generate()
     24 generate_n()
     25 replace()
     26 replace_if()
     27 replace_copy()
     28 replace_copy_if()
     29 
     30 
     31 
     32 ---------------------------
     33 Microsoft Visual C++ Runtime Library
     34 ---------------------------
     35 Debug Assertion Failed!
     36 
     37 Program: D:Users	xwtechprojectscb37aDebugcb37a.exe
     38 File: d:program files (x86)microsoft visual studio2017communityvc	oolsmsvc14.16.27023includevector
     39 Line: 94
     40 
     41 Expression: can't decrement vector iterator before begin
     42 
     43 For information on how your program can cause an assertion
     44 failure, see the Visual C++ documentation on asserts.
     45 
     46 (Press Retry to debug the application)
     47 
     48 ---------------------------
     49 中止(A)   重试(R)   忽略(I)
     50 ---------------------------
     51 
     52 copy_backward(ilist.begin(), ilist.end(), ivec.begin());
     53 copy_backward的最后一个参数需要从最后往前面拷贝数据,所以应该是ivec.end().
     54 
     55 Expression: can't decrement vector iterator before begin
     56 意思就是指针溢出了,ivec.begin()之前的数据,就超出范围。 
     57 copy_backward是从ivec.end()的前一个数开始copy. ivec.end()是指向最后一个的下一个。
     58 
     59 
     60 
     61 ---------------------------
     62 Microsoft Visual C++ Runtime Library
     63 ---------------------------
     64 Debug Assertion Failed!
     65 
     66 Program: D:Users	xwtechprojectscb37aDebugcb37a.exe
     67 File: d:program files (x86)microsoft visual studio2017communityvc	oolsmsvc14.16.27023includelist
     68 Line: 187
     69 
     70 Expression: cannot dereference end list iterator
     71 
     72 For information on how your program can cause an assertion
     73 failure, see the Visual C++ documentation on asserts.
     74 
     75 (Press Retry to debug the application)
     76 
     77 ---------------------------
     78 中止(A)   重试(R)   忽略(I)
     79 ---------------------------
     80 Expression: cannot dereference end list iterator,空的容器就会出问题。
     81 使用list迭代器,先定义容量。
     82 比如:list<int> ilist(20);//默认20个0,
     83 copy(ivec.begin(), ivec.end(), ilist2.begin());
     84 copy到ilist必须要保证ilist有足够的空间。
     85 或者使用back_inserter
     86 copy(ivec.begin(), ivec.end(), back_inserter(ilist));//这样就不用考虑容器容量问题
     87 
     88 rror C2065: “ostream_iterator”: 未声明的标识符,需要包含:#include <iterator>
     89 
     90 */
     91 
     92 #include <iostream>
     93 #include <algorithm>
     94 #include <vector>
     95 #include <list>
     96 #include <iterator>
     97 
     98 
     99 using namespace std;
    100 
    101 int main()
    102 {
    103     list<int> ilist;
    104     for (int i = 0; i < 10; ++i)
    105         ilist.push_back(i);
    106     for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
    107         cout << *iter << ' ';
    108     cout << endl;
    109 
    110     vector<int> ivec(ilist.size()*2);
    111     for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
    112         cout << *iter << ' ';
    113     cout << endl;
    114 
    115     copy(ilist.begin(), ilist.end(), ivec.begin());
    116     cout << "copy后的数据" << endl;
    117     for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
    118         cout << *iter << ' ';
    119     cout << endl;
    120     //copy_backward的最后一个参数一定是ivec.end().
    121     copy_backward(ilist.begin(), ilist.end(), ivec.end());
    122     cout << "copy_backward后的数据" << endl;
    123 
    124     //
    125     
    126 
    127     for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
    128         cout << *iter << ' ';
    129     cout << endl;
    130 
    131     //例子2
    132     vector<int> ivec2;
    133     list<int> ilist2(20);//默认分配空间,20个0;
    134     for (int i = 1; i <= 9; ++i)
    135         ivec2.push_back(i);
    136     copy(ivec2.begin(), ivec2.end(), ilist2.begin());
    137 
    138     for (list<int>::iterator iter = ilist2.begin(); iter != ilist2.end(); ++iter)
    139         cout << *iter << ' ';
    140     cout << endl;
    141 
    142     cout << "copy拷贝到输出流里面" << endl;
    143     copy(ivec2.begin(), ivec2.end(), ostream_iterator<int>(cout," "));
    144     cout << endl;
    145 
    146     cout << "rbegin()逆向迭代器拷贝" << endl;
    147     copy(ivec2.rbegin(), ivec2.rend(), ilist2.begin());
    148     for (list<int>::iterator iter = ilist2.begin(); iter != ilist2.end(); ++iter)
    149         cout << *iter << ' ';
    150     cout << endl;
    151 
    152     return 0;
    153 }
     1 /*cb37b_c++_
     2 
     3 */
     4 
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <vector>
     8 
     9 using namespace std;
    10 
    11 int main()
    12 {
    13 
    14     vector<char> source(10, '.');
    15     for (char c = 'a'; c <= 'f'; c++)
    16     {
    17         source.push_back(c);
    18     }
    19     source.insert(source.end(), 10, '.');
    20 
    21     for (vector<char>::iterator iter = source.begin(); iter != source.end(); ++iter)
    22         cout << *iter << ' ';
    23     cout << endl;
    24 
    25     vector<char> c1(source.begin(), source.end());
    26     copy(c1.begin() + 10, c1.begin() + 16, c1.begin() + 7);
    27     //自己对自己容器修改
    28     /*
    29     . . . . . . . . . . a b c d e f . . . . . . . . . .
    30     . . . . . . . a b c d e f d e f . . . . . . . . . .
    31     把a b c d e f从索引7开始拷贝,覆盖。
    32     
    33     */
    34     for (vector<char>::iterator iter = c1.begin(); iter != c1.end(); ++iter)
    35         cout << *iter << ' ';
    36     cout << endl;
    37 
    38     vector<char> c2(source.begin(), source.end());
    39     copy_backward(c2.begin() + 10, c2.begin() + 16, c2.begin() + 19);
    40     //从f开始拷贝,从右边,最后面开始拷贝的。
    41     for (vector<char>::iterator iter = c2.begin(); iter != c2.end(); ++iter)
    42         cout << *iter << ' ';
    43     cout << endl;
    44 
    45 
    46 }
    欢迎讨论,相互学习。 txwtech@163.com
  • 相关阅读:
    pandas读写csv最简代码
    csv.read和csv.write
    交叉验证
    纪念被win10大更新搞崩的vbox
    c++中关于保留小数的小总结
    Java里的值传递与“引用传递”——一些想法
    Eclipse使用遇到的一些问题及解决方案(持续更新)
    Pray for 京阿尼——愿逝者安息,伤者早日康复
    洛谷p1208—混合牛奶【典型贪心】(关联排序小技巧)
    洛谷p1217—回文质数(默默宣传打表法)
  • 原文地址:https://www.cnblogs.com/txwtech/p/12346310.html
Copyright © 2011-2022 走看看