Вы можете использовать erase
для удаления элемента в определенной позиции итератора и insert
для вставки элементов перед определенной позицией итератора. Чтобы запустить итератор, используйте std::next
и std::prev
.
#include <iostream>
#include <iterator>
#include <vector>
int main() {
std::vector<int> vecta{10, 20, 30, 40, 50};
std::vector<int> vectb{1000, 2000, 3000};
// erase 30 from the vector
vecta.erase(std::next(vecta.begin(), 2));
// insert vectb before position 2
vecta.insert(std::next(vecta.begin(), 2), vectb.begin(), vectb.end());
for(int v : vecta) {
std::cout << v << ' ';
}
std::cout << '\n';
}
Выход:
10 20 1000 2000 3000 40 50
Альтернатива, которая не требует erase
. Это, вероятно, немного быстрее:
#include <utility> // added for std::swap
int main() {
std::vector<int> vecta{10, 20, 30, 40, 50};
std::vector<int> vectb{1000, 2000, 3000};
std::vector<int> result;
// reserve space for the number of elements you know will be in the resulting vector
result.reserve(vecta.size() - 1 + vectb.size());
// append the 2 first elements from vecta
result.insert(result.end(), vecta.begin(), std::next(vecta.begin(), 2));
// append vectb
result.insert(result.end(), vectb.begin(), vectb.end());
// append the last two elements from vecta
result.insert(result.end(), std::prev(vecta.end(), 2), vecta.end());
// let vecta take over the data in result and vice-a-versa
std::swap(result, vecta);
}