0.時刻提醒自己
Note: vector的釋放
1.功能
復制 [first, last) 所定義的范圍中的元素到始於 d_first 的另一范圍.
區別: copy_if 帶條件拷貝,而非全拷貝
2. 頭文件與返回值
2.1 頭文件
#include <numeric>
2.2 返回值
指向目標范圍中最后復制元素的下個元素的輸出迭代器
3. 異常
可能拋出異常
若算法無法分配內存,則拋出 std::bad_alloc 。
4.copy用法
4.1 代碼
// 1. 構建一個原始數組
std::vector<int> src_vector(5);
// iota(起始,結束,從哪一個開始);
std::iota(src_vector.begin(), src_vector.end(), 10);
// 2. 將原始數組拷貝到目標數組
std::vector<int> dst_vector;
// 3. 執行拷貝
std::copy(src_vector.begin(), src_vector.end(), std::back_inserter(dst_vector));
// 4.遍歷輸出目標數組和原始數組
std::cout << "原始數組:\n";
std::for_each(src_vector.begin(), src_vector.end(), [](const int &item) {std::cout << "item = " << item << std::endl; });
std::cout << "目標數組:\n";
std::for_each(dst_vector.begin(), dst_vector.end(), [](const int &item) {std::cout << "item = " << item << std::endl; });
4.2 輸出
5.copy_if用法
5.1 代碼
// 1. 構建一個原始數組
std::vector<int> src_vector(5);
// iota(起始,結束,從哪一個開始);
std::iota(src_vector.begin(), src_vector.end(), 10);
// 2. 將原始數組拷貝到目標數組
std::vector<int> dst_vector(src_vector.size());
// 3. 將 src 拷貝到 dst,當時只拷貝大於13的元素。
auto it = std::copy_if(src_vector.begin(), src_vector.end(), dst_vector.begin(), [](const int item) {return item > 13; });
// 調整拷貝后的大小,為什么? 因為初始化時,指定了其大小
dst_vector.resize(std::distance(dst_vector.begin(), it));
// 4.遍歷輸出目標數組和原始數組
std::cout << "原始數組:\n";
std::for_each(src_vector.begin(), src_vector.end(), [](const int &item) {std::cout << "item = " << item << std::endl; });
std::cout << "目標數組:\n";
std::for_each(dst_vector.begin(), dst_vector.end(), [](const int &item) {std::cout << "item = " << item << std::endl; });
5.2 輸出