std::copy复制指定范围所有元素,需预先分配目标空间或使用std::back_inserter;std::copy_if按条件复制,接受谓词函数,常结合std::back_inserter动态添加元素,二者均返回指向末尾的迭代器。

在C++中,std::copy 和 std::copy_if 是定义在 algorithm 头文件中的两个非常实用的算法函数,用于从一个容器复制元素到另一个容器。它们支持按条件或无条件拷贝,适用于各种标准容器(如 vector、list、array 等)。
std::copy 用于将一个范围内的所有元素复制到目标位置。它需要三个参数:源范围的起始和结束迭代器,以及目标容器的起始写入位置。
目标容器需要预先分配足够的空间,否则可能导致未定义行为。
示例代码:
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size()); // 必须提前分配空间
std::copy(src.begin(), src.end(), dst.begin());
for (int x : dst) {
std::cout << x << " ";
}
// 输出:1 2 3 4 5
}
也可以结合 std::back_inserter 避免手动分配空间:
立即学习“C++免费学习笔记(深入)”;
std::vector<int> dst; // 空容器 std::copy(src.begin(), src.end(), std::back_inserter(dst));
std::copy_if 在复制时加入条件判断,只复制满足条件的元素。它比 std::copy 多一个谓词(predicate)参数,通常是一个 lambda 表达式或函数对象。
示例:复制所有偶数
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> src = {1, 2, 3, 4, 5, 6};
std::vector<int> even;
std::copy_if(src.begin(), src.end(), std::back_inserter(even),
[](int n) { return n % 2 == 0; });
for (int x : even) {
std::cout << x << " ";
}
// 输出:2 4 6
}
你可以自定义任意条件,比如复制大于10的数、字符串长度超过5的元素等。
使用这两个函数时需注意以下几点:
基本上就这些。合理使用 std::copy 和 std::copy_if 能让代码更简洁、更易读,避免手动写循环带来的错误。关键是提前处理好目标容器的容量问题。
以上就是C++如何使用copy和copy_if实现容器拷贝的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号