template <class InputIterator, class OutputIterator, class UnaryPredicate> OutputIterator copy_if (InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred); |
template <class InputIterator, class OutputIterator, class UnaryPredicate> OutputIterator copy_if (InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred) { while (first!=last) { if (pred(*first)) { *result = *first; ++result; } ++first; } return result; } |
// copy_if example #include <iostream> // std::cout #include <algorithm> // std::copy_if, std::distance #include <vector> // std::vector int main () { std::vector<int> foo = {25,15,5,-5,-15}; std::vector<int> bar (foo.size()); // copy only positive numbers: auto it = std::copy_if (foo.begin(), foo.end(), bar.begin(), [](int i){return !(i<0);} ); bar.resize(std::distance(bar.begin(),it)); // shrink container to new size std::cout << "bar contains:"; for (int& x: bar) std::cout << ' ' << x; std::cout << '\n'; return 0; |
copy | 复制范围的元素(函数模板) |
replace_copy_if | 复制并检测替换范围内的值(函数模板) |
remove_copy_if | 检测并复制没有覆盖的元素(函数模板) |