c++11之copy 和 copy_if 的用法


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 輸出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM