首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ copy 與 copy_backward 用法詳解與示例

     編輯:關於C++

標準庫算法 <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),而非起始位置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved