C++规范:std::copy() std::back_inserter()

说明:

std::copy(source_begin_iter,  source_end_iter,  des_iter):

copy函数会讲原容器指定位置的元素,赋值到目标容器的指定位置,覆盖处理。

note:目标容器必须能够容纳要复制的元素,如果容量不够,代码crash!!

std::back_inserter(vector/queue):

note:

1)back_inserter只能获得有迭代器类型的容器的back_inseter_iter类型的迭代器!!!

2)back_inserter能够对其处理的容器动态扩充!!!!

        因此适用于,没有事先声明容器大小,有需要动态扩充的场景,比如std::copy(),以及集合运算std::XXX()

// std::copy结合std::back_inserter()向未指定容器大小的容器中copy元素
std::vector<std::string> a(100, "Hello, World");

// vector b的容器大小未指定,如果在std::copy()的目标容器的迭代器位置直接用b.begin()/b.end()
// copy会crash
std::vector<std::string> b;
std::copy(a.begin(), a.end(), std::back_inserter(b));

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
std::copy_if 是 C++ 标准库中的一个算法函数,用于将满足特定条件的元素从一个容器复制到另一个容器中。它的函数原型如下: ```cpp template<class InputIt, class OutputIt, class UnaryPredicate> OutputIt copy_if(InputIt first, InputIt last, OutputIt d_first, UnaryPredicate pred); ``` 该函数接受四个参数: - `first` 和 `last`:定义了源容器的范围,包括要复制的元素。 - `d_first`:定义了目标容器中要复制到的位置。 - `pred`:是一个一元谓词(Unary Predicate),用于判断元素是否满足复制的条件。 `copy_if`函数遍历输入范围 `[first, last)` 中的每个元素,并通过调用谓词 `pred` 来检查每个元素是否满足特定条件。如果满足条件,则将该元素复制到输出范围中,即从 `d_first` 开始的位置,并将 `d_first` 向前递增。 以下是一个示例代码,演示了如何使用 `std::copy_if` 函数将源容器中大于 5 的整数复制到目标容器中: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> source = {1, 6, 2, 8, 4, 7}; std::vector<int> destination; std::copy_if(source.begin(), source.end(), std::back_inserter(destination), [](int num){ return num > 5; }); // 输出目标容器中的元素 for (const auto& num : destination) { std::cout << num << " "; } return 0; } ``` 输出结果为: ``` 6 8 7 ``` 这里使用了 lambda 表达式作为谓词,判断元素是否大于 5。满足条件的元素被复制到了目标容器中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值