numeric 標頭檔案中的 adjacent_difference() 演算法可以算出輸入序列中相鄰元素對的差,並將它們儲存到另一個序列中。第一個元素會被原封不動地複製到新的序列中,然後用第二個元素減去第一個元素的結果作為新序列的第二個元素,再用第三個元素減去第二個元素的結果作為新序列的第三個元素,以此類推。例如:
std::vector<int> data {2, 3, 5, 7, 11, 13, 17, 19}; std::cout << "Differences: ";
std::adjacent_difference(std::begin(data), std::end(data),std::ostream_iterator<int>{std::cout," "});
std::cout << std::endl;// Differences: 2 1 2 2 4 2 4 2
data 容器中元素之間的差值被 adjacent_difference() 演算法直接輸出,因為輸出序列的疊代器是一個寫到 cout 的輸出流疊代器。這裡產生的輸出如注釋所示。
這個演算法的第二個版本允許指定一個運算子來代替應用到元素對上的減法運算子。下面是一個範例:
std::vector<int> data {2, 3, 5, 7, 11, 13, 17, 19};
std::cout << "Products : ";
std::adjacent_difference (std::begin (data), std::end(data),std::ostream_iterator<int>{std::cout, " "},std::multiplies<>());
std::cout << std::endl; // Products : 2 6 15 35 77 143 221 323
第 4 個引數是一個指定元素之間運算的函數物件,在這個範例中是一個來自於 functional 標頭檔案的 multiplies 範例。可以看到,這樣會得到 data 中連續元素的乘積。這個函數可以接受任何二元運算,只要不改變輸入序列或者使疊代器無效。下面是一個將 plus<T> 函數物件用作元素對之間的運算子來計算 Fibonacci 數列的範例:
std::vector<size_t> fib(15, 1); // 15 elements initialized with 1
std::adjacent_difference(std::begin(fib), std::end(fib)-1, std::begin(fib)+1,std::plus<size_t>());
std::copy(std::begin(fib), std::end(fib),std::ostream_iterator<size_t>{std::cout," "});
std::cout << std::endl; // Output: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
這裡 adjacent_diflference() 演算法會對 fib 容器中的元素對進行相加,並將結果寫回從第二個元素開始的 fib 容器。fib 的最後一個元素沒有包含輸入序列,輸入序列中最後兩個元素的和會覆蓋最後一個元素的值。在這個運算之後,fib 會包含一個從 1 開始的 Fibonacci 數列。注釋顯示了 copy() 演算法生成的輸出。