<algorithm>copy(first, last, result):將 [first, last) 複製到以 result 開始的區間,**正向**複製,要求目標區間不與源區間重疊或目標在源之前。copy_backward(first, last, result):將 [first, last) 複製到以 result 結束的區間,**逆向**複製(從尾部開始),適用於目標區間在源區間內且重疊時(如向右移動數組元素)。#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int myInts[] = {10,20,30,40,50,60,70}; // 源數組 7 元素
vector myVector(8, 7); // 目標容器 8 元素,初值 7
// 1. copy:覆蓋前 7 個位置
copy(myInts, myInts + 7, myVector.begin());
// myVector: 10 20 30 40 50 60 70 7
// 2. copy_backward:將前 5 個元素向右移動 3 位
// 源:myVector[0..4] (10..50) 目標結尾:myVector.begin()+8
copy_backward(myVector.begin(), myVector.begin() + 5, myVector.end());
// myVector: 10 20 30 10 20 30 40 50
// 說明:從尾部開始複製,先放 50 到位置 7,再 40 到 6,... 10 到 3
// 3. 另一個 copy_backward 示例:在 vector 內部移動
vector v = {1,2,3,4,5,6,7,8};
copy_backward(v.begin()+2, v.begin()+5, v.end()); // 移動 [2,5) 即 {3,4,5} 到末尾
// 結果: 1 2 3 4 5 3 4 5
return 0;
}
| 場景 | 推薦算法 | 原因 |
|---|---|---|
| 目標區間在源區間之前或不重疊 | copy | 正向複製,直觀高效 |
| 目標區間在源區間之後且重疊(向右移動) | copy_backward | 逆向複製避免覆蓋未讀數據 |
| 目標區間在源區間之前且重疊(向左移動) | copy | 正向複製避免覆蓋 |
記住:copy_backward 的第三個參數是**目標區間的結尾**(one-past-the-end),而非起始位置。