std::copyもしくはこれに類似するもので、コピー先の任意の位置を指定してコピーする方法はありませんか？


Rubyでいうと下記のようなコードをC++で実現する方法を探しています（もちろんC++でも、for文を素朴に使えばできます）。

[code]

    hoges = [0, 1, 2, 3, 4, 5]
    foos = [10, 11, 12, 13, 14, 15]
    
    hoges[2..3] = foos[2..3]
    
    pp hoges
    
[/code]

結果：

[code]

    [0, 1, 12, 13, 4, 5]
    
[/code]

* * *

std::copyというのがあるようですので、まず練習として最後の２個の要素をコピーするコードを書いてみました。

[code]

    #include <iostream>
    #include <vector>
    
    std::vector<int> create_vector(int length) {
      std::vector<int> v;
      for (int i = 0; i < length; i++) {
        v.push_back(i + 1);
      }
      return v;
    }
    
    int main(void) {
      std::vector<int> hoges = create_vector(10);
    
      std::vector<int> bars;
      std::copy(hoges.end() - 2, hoges.end(), back_inserter(bars));
    
      for (const auto &bar : bars) {
        std::cout << bar << std::endl;
      }
    
      return 0;
    }
    
[/code]

結果：

[code]

    9
    10
    
[/code]

* * *

どうやら  
<https://cpprefjp.github.io/reference/algorithm/copy.html>  
によると、相手先のインデックスを指定するものがなさそうなので、Rubyのような書き方はできなさそうであると気づきました...

仮にあるとすると下記のような感じの指定方法になるかと思うのですが、可能でしょうか？

[code]

    std::vector<int> hoges = create_vector(10);
    std::vector<int> foos = create_vector(10);
    std::copy(hoges.begin() + 2, hoges.begin() + 3, foos.begin() + 2, foos.begin() + 3, foos);
    
[/code]




> 仮にあるとすると下記のような感じの指定方法になるかと思うのですが、可能でしょうか？
[code]

    #include <iostream>
    #include <numeric>
    #include <vector>
    
    int main(void) {
      std::vector<int> hoges(6);
      std::iota(hoges.begin(), hoges.end(), 0);
      std::vector<int> foos(6);
      std::iota(foos.begin(), foos.end(), 10);
    
      std::copy(foos.begin()+2, foos.begin()+4, hoges.begin()+2);
    
      for (const auto &item: hoges) {
        std::cout << item << " ";
      }
      std::cout << std::endl;
    }
    
    # 0 1 12 13 4 5 
    
[/code]




> 仮にあるとすると下記のような感じの指定方法になるかと思うのですが、可能でしょうか？
[code]

    #include <iostream>
    #include <numeric>
    #include <vector>
    
    int main(void) {
      std::vector<int> hoges(6);
      std::iota(hoges.begin(), hoges.end(), 0);
      std::vector<int> foos(6);
      std::iota(foos.begin(), foos.end(), 10);
    
      std::copy(foos.begin()+2, foos.begin()+4, hoges.begin()+2);
    
      for (const auto &item: hoges) {
        std::cout << item << " ";
      }
      std::cout << std::endl;
    }
    
    # 0 1 12 13 4 5 
    
[/code]

