复制特定的矢量部分 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;
}
我想将向量重新排序为特定方式,例如,对于下一个向量
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;
}