d65_q2b_some_move.cpp
cpp
#pragma region student.h
#ifndef __STUDENT_H_
#define __STUDENT_H_
#include <algorithm>
#include <iostream>
#include <vector>
template <typename T>
void CP::vector_some_move<T>::insert(int index, std::vector<T> &value) {
int i = std::upper_bound(aux.begin(), aux.end(), index) - aux.begin();
int idx = i > 0 ? index -= aux[i - 1] : index;
mSize += value.size();
mCap += value.size();
std::vector<T> newVector;
// Update aux
aux.push_back(aux.back() + value.size());
for (int k = aux.size() - 2; k > i; k--) {
aux[k] = aux[k + 1] - (aux[k] - aux[k - 1]);
}
auto &mDataI = mData[i];
// Get data range
std::vector<T> newRange(value.cbegin(), value.cend());
for (int k = idx; k < mDataI.size(); k++) {
newRange.push_back(mDataI[k]);
}
// Apply data range to mData[i]
for (int k = idx; k < mDataI.size(); k++) {
mDataI[k] = newRange[k - idx];
}
// Apply data range to newVector
for (int k = mDataI.size() - idx; k < newRange.size(); k++) {
newVector.push_back(newRange[k]);
}
mData.insert(mData.cbegin() + i + 1, newVector);
}
#endif
#pragma endregion student.hSee on GitHub
Last Updated: 15/1/2567 13:25:21 (UTC+7)