STL演算法之複製 移動 填充 歸併 替換

2021-08-04 05:35:46 字數 4323 閱讀 7401

轉接自stl演算法

1.copy() 將乙個區間元素複製到另乙個區間

2.copy_if() 將滿足謂詞pred條件的元素複製到另乙個區間

3.copy_backward() 將區間的元素從最後乙個元素開始複製

4.copy_n() 複製乙個區間的n個元素到另一區間

5 move() 將區間的元素移到另乙個區間

6.move_backward() 將區間元素從最後乙個元素從後向前複製

7.transform() 將區間的元素通過func()的返回值複製到另乙個(或相同)區間

8.merge() 將兩個有序區間歸併到另乙個區間

9.swap_ranges() 交換兩個區間的元素

10.fill() 將區間裡元素以特定值填充

11.fill_n() 從起點開始填充n個特定值

12.generate() 以func操作的結果替換每乙個元素

13.generate_n() 以func操作的結果替換以beg開始的n個元素

14.iota() 將區間元素以value值開始的遞增值替換

15.replace() 將區間裡oldvalue以newvalue替換

16.replace_if() 將區間裡滿足謂詞pred的oldvalue以newvalue替換

17.replace_copy() 將區間複製到另一區間但oldvalue以newvalue代替

18.replace_copy_if() 將區間複製到另一區間但滿足謂詞pred的oldvalue以newvalue代替

#include 

#include

#include

#include

#include

#include

using

namespace

std;

// 1.copy() 將乙個區間元素複製到另乙個區間

// 2.copy_if() 將滿足謂詞pred條件的元素複製到另乙個區間

// 3.copy_backward() 將區間的元素從最後乙個元素開始複製

// 4.copy_n() 複製乙個區間的n個元素到另一區間

// 5 move() 將區間的元素移到另乙個區間

// 6.move_backward() 將區間元素從最後乙個元素從後向前複製

// 7.transform() 將區間的元素通過func()的返回值複製到另乙個(或相同)區間

// 8.merge() 將兩個有序區間歸併到另乙個區間

// 9.swap_ranges() 交換兩個區間的元素

// 10.fill() 將區間裡元素以特定值填充

// 11.fill_n() 從起點開始填充n個特定值

// 12.generate() 以func操作的結果替換每乙個元素

// 13.generate_n() 以func操作的結果替換以beg開始的n個元素

// 14.iota() 將區間元素以value值開始的遞增值替換

// 15.replace() 將區間裡oldvalue以newvalue替換

// 16.replace_if() 將區間裡滿足謂詞pred的oldvalue以newvalue替換

// 17.replace_copy() 將區間複製到另一區間但oldvalue以newvalue代替

// 18.replace_copy_if() 將區間複製到另一區間但滿足謂詞pred的oldvalue以newvalue代替

void test()

; //2

copy_if(istream_iterator(cin), istream_iterator(), ostream_iterator(cout, " "), f);

//3vector

a;array

b;copy_backward(a.begin(), a.end(), b.end());

for (auto &v : b)

cout

<< v << ends;

cout

<< endl;

//4copy_n(a.begin(), 3, ostream_iterator(cout, " "));

cout

<< endl;

vector

c;//5

move(a.begin(), a.end(), back_inserter(c));

for (auto &v : c)

cout

<< v << ends;

cout

<< endl;

//6array

d;move_backward(c.begin(), c.end(), d.end());

for (auto &v : d)

cout

<< v << ends;

auto f1 = (int& v)

;//7

transform(d.begin(), d.end(), d.begin(), f1);

cout

<< endl;

for (auto &v : d)

cout

<< v << ends;

//8cout

<< endl;

vector

e;merge(a.begin(), a.end(), b.begin(), b.end(), back_inserter(e));

for (auto &v : e)

cout

<< v << ends;

cout

<< ends;

//9swap_ranges(a.begin(), a.begin() + 3, b.begin() + 3);

for (auto &v : a)

cout

<< v << ends;

//10

fill(a.begin(), a.end(), 3);

cout

<< endl;

for (auto &v : a)

cout

<< v << ends;

//11

fill_n(a.begin(), 3, 2);

cout

<< endl;

for (auto &v : a)

cout

<< v << ends;

auto f2 = [&]()

;cout

<< endl;

//12

generate(a.begin(), a.end(), f2);

for (auto &v : a)

cout

<< v << ends;

//13

generate_n(a.begin(),3,f2);

cout

<< endl;

for (auto &v : a)

cout

<< v << ends;

//14

iota(a.begin(), a.end(), 5);

cout

<< endl;

for (auto &v : a)

cout

<< v << ends;

//15

replace(a.begin(), a.end(), 6, 5);

cout

<< endl;

for (auto &v : a)

cout

<< v << ends;

auto f3 = (const

int& v)

;//16

replace_if(a.begin(), a.end(), f3, 5);

cout

<< endl;

for (auto &v : a)

cout

<< v << ends;

//17

replace_copy(b.begin(), b.end(), a.begin(), 2, 7);

cout

<< endl;

for (auto &v : a)

cout

<< v << ends;

//18

replace_copy_if(a.begin(), a.end(), b.begin(), f3, 5);

cout

<< endl;

for (auto &v : b)

cout

<< v << ends;

}int main()

(5)STL演算法之複製

修改序列式演算法能對容器內容造成修改,而改變容器一般有兩種方法 1 使用迭代器遍歷序列的過程中,直接改變元素的值 2 在元素複製的過程中,改變元素的值。能對容器內容造成改變的演算法主要包括 複製 轉換 互換 賦值 替換 逆轉 排列等 8種。1 複製 元素複製是指在兩個容器變數之間進行元素傳遞。1 c...

Linux之複製 本地,遠端複製 ,移動,刪除檔案

複製檔案或資料夾 cp 要複製的檔案 指定複製到的目錄 檔案 cp home a.txt data 資料夾 cp r home a data 遠端複製檔案或資料夾到本地目錄 scp 使用者名稱 遠端ip 要複製的檔案 夾 路徑 指定複製到本地的路徑 如下 檔案 scp root 60.205 211...

STL的移動演算法

要在自定義型別中使用移動演算法,需要在元素中提供移動賦值運算子,移動賦值運算子和std move 詳見 c 高階程式設計 第9章 class mystring mystring const string str mstr str mystring operator mystring rhs 移動賦值...