std::copy, std::copy_if

在这里插入图片描述

#include <algorithm>
#include <iostream>
#include <vector>
#include <iterator>
#include <numeric>
 
int main()
{
    std::vector<int> from_vector(10);
    std::iota(from_vector.begin(), from_vector.end(), 0); //此函数命名来源于编程语言 APL 中的整数函数 ⍳ , 在 <numeric> 定义,以始于 value 并重复地求值 ++value 的顺序递增值填充范围 [first, last) 。
// 参数
// first, last	-	以 value 开始,按顺序递增填充的值的范围
// value	-	要存储的初始值,表达式 ++value 必须为良式
// 返回值
// (无)

// 复杂度
// 正好 last - first 次自增与赋值。
 
    std::vector<int> to_vector;
    std::copy(from_vector.begin(), from_vector.end(),
              std::back_inserter(to_vector));
// 或可选地,
//  std::vector<int> to_vector(from_vector.size());
//  std::copy(from_vector.begin(), from_vector.end(), to_vector.begin());
// 任一方式都等价于
//  std::vector<int> to_vector = from_vector;
 
    std::cout << "to_vector contains: ";
 
    std::copy(to_vector.begin(), to_vector.end(),
              std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    std::cout << "odd numbers in to_vector are: ";
 
    std::copy_if(to_vector.begin(), to_vector.end(),
                 std::ostream_iterator<int>(std::cout, " "),
                 [](int x) { return (x % 2) == 1; });
    std::cout << '\n';
}
说明
ostream_iterator写入元素的迭代器。
ostream_iterator用于向输出流ostream(如cout)中写入连续的元素。所以可以如下定义一个ostream_iterator:
std::ostream_iterator<double> oit (std::cout);

也可以在上述构造函数中加入分隔符,如下:
std::ostream_iterator<double> oit (std::cout, ", ");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值