Копирование отдельных частей вектора Переполнение стека

Я хочу изменить порядок вектора определенным образом, например, для следующего вектора

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);

Итак, кто-нибудь знает, как получить то, что я хочу?

0

Решение

использование 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;
}
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector