C++ STL中不同的复制方法 | std :: copy(),copy_n(),copy_if(),copy_backward()
C++ STL中存在各种类型的copy()函数,允许以不同的方式执行复制操作,它们都具有自己的用途。这些函数都定义在头文件<algorithm>
中。本文介绍这些函数的用法,方便日常编程。
1. copy(strt_iter1,end_iter1,strt_iter2): 通用的copy函数用于将一个容器的元素 复制 到另一个容器中的 范围 内。它需要3个参数:
- strt_iter1: 源容器的开头指针,从这里开始复制元素。
- end_iter1: 源容器的结尾指针,直到这里停止复制元素。
- strt_iter2: 目标容器的开头指针,从这里开始复制元素。
2. copy_n(strt_iter1,num,strt_iter2): 这个版本的copy()函数允许选择在目标容器中复制多少个元素。他同样需要三个参数:
- strt_iter1: 源容器的开头指针,从这里开始复制元素。
- num: 指定从strt_iter1开始复制多少个数字到目标容器。如果输入负数,则不执行任何操作。
- strt_iter2: 目标容器的开头指针,从这里开始复制元素。
输出:
3. copy_if(): 这个函数根据 条件 的“ 结果 ”进行复制。可通过一个 返回布尔值的函数 来实现。
这个函数需要4个参数,其中3个和copy()相似,另一个是函数,当返回true时候把数字复制到容器中,否则不复制。
4. copy_backward(): 这个函数从 后向前 开始将元素复制到目标容器,并一直复制直到所有数字都被复制。复制从“strt_iter2”开始,但在向后的方向上。它也需要与copy()相似的参数。
输出:
5. 使用插入器复制():
在进行copy()操作之前,让我们先了解inserter()的语法。
插入器()用作目标,用于将容器的元素复制到哪里。
插入器()接受两个参数。第一个是任意类型的容器,第二个是容器的迭代器。
它返回一个在任意类型的容器上工作的insert_iterator实例。这个包装函数有助于创建insert_iterator实例。键入迭代器的名称需要知道容器的精确完整类型,这可能很繁琐,妨碍通用编程。使用此函数可以利用自动模板参数推断,使编译器为您匹配正确的类型。
插入器的语法():
std::inserter(Container& x, typename Container::iterator it);
x: 目标容器,新元素将插入其中。
it: 指向插入点的迭代器。
返回: 将元素插入到由it指示的x位置的insert_iterator。
使用插入器的复制的语法():
输出: