std::copy, std::copy_if
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <algorithm> 中定义
|
||
template< class InputIt, class OutputIt > OutputIt copy( InputIt first, InputIt last, OutputIt d_first ); |
(1) | |
template< class InputIt, class OutputIt, class UnaryPredicate > OutputIt copy_if( InputIt first, InputIt last, |
(2) | (C++11 起) |
复制中的元素定义的范围内,由
[first, last)
到另一个范围开始于d_first
。第二个功能只有谓词的元素复制pred
回报true. 原文:
Copies the elements in the range, defined by
[first, last)
, to another range beginning at d_first
. The second function only copies the elements for which the predicate pred
returns true. 目录 |
[编辑] 参数
first, last | - | 元素的范围内,要复制的复本
|
d_first | - | 的目标范围的开头。如果
d_first 内[first, last) ,std::copy_backward必须使用代替std::copy. 原文: the beginning of the destination range. If d_first is within [first, last) , std::copy_backward must be used instead of std::copy. |
pred | - | unary predicate which returns true 所需的元素 . The signature of the predicate function should be equivalent to the following: bool pred(const Type &a); The signature does not need to have const &, but the function must not modify the objects passed to it. |
类型要求 | ||
-InputIt 必须满足 InputIterator 的要求。
| ||
-OutputIt 必须满足 OutputIterator 的要求。
|
[编辑] 返回值
输出迭代器在目标范围内的元素,复制过去的最后一个元素.
原文:
Output iterator to the element in the destination range, one past the last element copied.
[编辑] 复杂度
1)究竟
2) last - first
任务究竟
last - first
的谓词中的应用原文:
Exactly
last - first
applications of the predicate[编辑] 注释
在实践中,实现
std::copy
避免多次分配和使用大容量复制功能,如std::memcpy如果该值类型是TriviallyCopyable
原文:
In practice, implementations of
std::copy
avoid multiple assignments and use bulk copy functions such as std::memcpy if the value type is TriviallyCopyable
[编辑] 可能的实现
版本一 |
---|
template<class InputIt, class OutputIt> OutputIt copy(InputIt first, InputIt last, OutputIt d_first) { while (first != last) { *d_first++ = *first++; } return d_first; } |
版本二 |
template<class InputIt, class OutputIt, class UnaryPredicate> OutputIt copy_if(InputIt first, InputIt last, OutputIt d_first, UnaryPredicate pred) { while (first != last) { if(pred(*first)) *d_first++ = *first; first++; } return d_first; } |
[编辑] 示例
下面的代码复制到一个向量和显示的内容都复制得到的载体
原文:
The following code uses copy to both copy the contents of one vector to another and to display the resulting vector:
#include <algorithm> #include <iostream> #include <vector> #include <iterator> int main() { std::vector<int> from_vector; for (int i = 0; i < 10; i++) { from_vector.push_back(i); } std::vector<int> to_vector(10); std::copy(from_vector.begin(), from_vector.end(), to_vector.begin()); std::cout << "to_vector contains: "; std::copy(to_vector.begin(), to_vector.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; }
输出:
to_vector contains: 0 1 2 3 4 5 6 7 8 9
[编辑] 另请参阅
按从后往前的顺序复制一个范围内的元素 (函数模板) | |
复制一个范围内不满足特定条件的元素 (函数模板) |