STL reverse copy複製演算法

2021-09-04 05:03:15 字數 2062 閱讀 9591

reverse_copy() 演算法可以將源序列複製到目的序列中,目的序列中的元素是逆序的。定義源序列的前兩個迭代器引數必須是雙向迭代器。目的序列由第三個引數指定,它是目的序列的開始迭代器,也是乙個輸出迭代器。如果序列是重疊的,函式的行為是未定義的。這個演算法會返回乙個輸出迭代器,它指向目的序列最後乙個元素的下乙個位置。

下面是乙個使用 reverse_copy() 和 copy_if() 的示例:

// testing for palindromes using reverse_copy()

#include // for standard streams

#include // for stream iterators and begin() and end()

#include // for reverse_copy() and copy_if()

#include // for toupper() and isalpha()

#include using std::string;

int main()

); std::for_each(std::begin(only_letters), std::end(only_letters), (char& ch) );

// make a reversed copy

string reversed;

std::reverse_copy(std::begin(only_letters), std::end(only_letters), std::back_inserter(reversed));

std::cout << '"' << sentence << '"'<< (only_letters == reversed ? " is" : " is not") << " a palindrome." << std::endl;

}}

這個程式會檢查一條語句(也可以是很多條語句)是否是回文的。回文語句是指正著讀或反著讀都相同的句子,前提是忽略一些像空格或標點這樣的細節。while 使我們可以檢查盡可能多的句子。用 getline() 讀一條句子到 sentence 中。如果讀到ctrl+z,輸入流中會設定 1 個eof標誌,它會結束迴圈。用 copy_if() 將 sentence 中的字母複製到 only_letters。這個 lambda 表示式只在引數是學母時返回 true,所以其他的任何字元都會被忽略。然後用 back_inserter() 生成的 back_insert_iterator 物件將這些字元追加到 only_letter。

for_each() 演算法會將三個引數指定的函式物件應用到前兩個引數定義的序列的元素上,因此這裡會將 only_letters 中的字元全部轉換為大寫。然後用 reverse_copy() 演算法生成和 only_letters 的內容相反的內容。比較 only_letters 和 reversed 來判斷輸入的語句是否為回文。

該程式的輸出結果為:

enter a sentence or ctrl+z to end: lid off a daffodil.

"lid off a daffodil." is a palindrome.

enter a sentence or ctrl+z to end: engaga le jeu que je le gagne.

"engaga le jeu que je le gagne." is not a palindrome.

enter a sentence or ctrl+z to end: ^z

reverse() 演算法可以在原地逆序它的兩個雙向迭代器引數所指定序列的元素。可以如下 所示用它來代替上述程式中的 reverse_copy():

string reversed ;

std::reverse(std::begin(reversed), std::end(reversed));

這兩條語句會替換上述程式中 reversed 的定義和 reverse_copy() 呼叫。它們生成乙個 only_letters 的副本 reversed,然後呼叫 reverse() 原地逆序 reversed 中的字串行。

復變函式視覺化 復積分

復變函式的積分 z0 z1f z dz f z z int f z dz sum f delta z delta z z0 z1 f z dz f z z每一小段的復數值 乙個向量 乘以中間的某個值 積分法則 仿真實變函式積分 常數可以提出來 積分可以分段積分留數 用積分計算泰勒展開的係數 積分與路...

Fastjson JSONArray深度複製

目錄 fastjson jsonarray深度複製 1,new jsonarray object 2,addall 3,序列化複製 總結 如何對fajstjson jsonarray型別的資料進行深度複製,有幾種方式呢?public static void main string args thro...

ogg復程序拆分

根據某些需要需要對ogg複製程序進行拆分,減緩單複製程序壓力,操作步驟如下 1 拆分前通過info rep1獲取列隊檔案資訊及rba號,ggsic stop rep1 ggsic info rep1 log read checkpoint file dirdat p1000421 first rec...