容器复制是指在两个容器之间进行元素传递。STL提供了复制算法用以实现元素复制。复制算法包括两种形式:copy()和copy_backward()。其原型为:
这两种形式具有较大区别,其参数和返回值类型也不相同。
copy()算法实现将(_First,_Last)指定范围的所有元素复制到另一个容器中由_Dest-Beg指定的起始位置。
copy_backward()算法的输入参数均是双向迭代器,其返回值也是双向迭代器,唯一不同的是:该算法从指定范围的最后一个元素开始复制,从后向前直到第一个元素。
由上述内容可知,copy()算法是正向遍历序列,copy_backward()算法是逆向遍历序列。这两种算法的使用方法不同,给程序员也带来些问题。例如,当源区间和目标区间存在重复区域时,如果要把一个区间复制到前端,应使用copy(),此时目标位置应在_First之前;如果要把一个区间复制到后端,应使用copy_backward()。目标位置_DestEnd应该在sourceEnd之后。总之,如果_DestEnd在(_First,_Last)范围内时,程序员要慎重考虑。
需要注意如下事项。
1)STL并没有提供copy_if()算法。如果希望实现有条件地复制容器中的元素,可以使用remove_copy_if()算法。
2)如果希望在复制过程中逆转元素的顺序,可以使用reverse_copy()算法。
3)程序员要确保目标区间有足够空间,否则需要使用insert迭代器。
4)若要实现两个容器间所有元素的复制,可以不使用copy()和copy_backward()算法,而使用assign()算法。
5)如果希望在复制过程中删除部分元素,可使用remove_copy()和remove_copy_if()算法。(www.xing528.com)
6)如果在复制过程中改变元素的数值,需要使用transform()算法和replace_copy()算法。
7)如果目标容器是空容器,需要使用插入型迭代器(InsertIterator)。
例4-15
例4-15的执行效果如图4-15所示。
图4-15 例4-15的执行效果
提示
①在使用copy_backward(_first,_end,_dest)算法时,源数据是源容器中[_first,_end]内的元素;在目标容器中,被复制的元素应该保留在目标指针_dest之前,并且在复制过程中是将[_first,_end]内的元素从倒数第一个至正数第一个顺序复制,存在指针_dest前面的内存空间。因此,在指定指针_dest时,程序员要充分留出足够的存储空间。
②关注back_inserter()的使用。
③关注如何将数据复制至cout中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。