复制特定的矢量部分 C++

Copy specific vector parts c++

我想将向量重新排序为特定方式,例如,对于下一个向量

vector<int> v=[100,101,102,103,104,105,106,107]

我有 6 个索引:i1=0,i2=1, j1=3,j2=4,k1=5,k2=6,我想要的新向量是:

v1=[100,104,105,101,102,103,106,107]

使用索引会是这样的:

v1=[ v[0]to v[i1],v[j2] to v[k1], v[i2] to v[j1], v[k2] to v[end]]

我只找到了一种复制零件的方法:

vector<int> v2(v.begin() + x, v.begin() + x + y);

所以,有人知道如何得到我想要的东西吗?

使用 <algorithm> 中的 std::copy,如果您确切知道索引,并且只是重新排序:

#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>

using namespace std;

int main() {
    int arr[] = {100,101,102,103,104,105,106,107};
    vector<int> v(arr, arr + 8);

    // your 6 indices:
    int i1=0, i2=1, j1=3, j2=4, k1=5, k2=6;

    // a copy vector:
    vector<int> v1(v.size()); // make sure to reserve enough size

    vector<int>::iterator v1end = v1.begin(); // where to copy

    // copy your ranges
    v1end = copy(v.begin(), v.begin() + i2 + 1, v1end);
    v1end = copy(v.begin() + j2, v.begin() + k1 + 1, v1end);
    v1end = copy(v.begin() + i2, v.begin() + j1 + 1, v1end);
    v1end = copy(v.begin() + k2, v.end(), v1end);

    // print the output
    copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, ", "));

    return 0;
}