Я хочу изменить порядок вектора определенным образом, например, для следующего вектора
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);
Итак, кто-нибудь знает, как получить то, что я хочу?
использование std::copy
от <algorithm>
, если вы точно знаете свои индексы, и вы просто переупорядочиваете:
#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;
}