#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
template <typename T>
class BasicVector
{
private:
int vector_size;
int vector_capacity;
T* data;
void resize();
public:
BasicVector(size_t capacity = 0);
~BasicVector();
void push_back(T);
void insert(int, T);
};
template <typename T>
void BasicVector<T>::resize()
{
T* temp = data;
T* newDataCap = new T[vector_capacity * 2];
this->data = newDataCap;
for (int i = 0; i < vector_size; i++)
{
data[i] = temp[i];
}
vector_capacity *= 2;
delete[] temp;
}
template <typename T>
BasicVector<T>::BasicVector(size_t capacity)
{
if (capacity < 16)
{
capacity = 16;
}
else if (capacity >= 16 && capacity % 2 == 1)
{
capacity = capacity + 1;
}
vector_capacity = capacity;
data = new T[vector_capacity];
vector_size = 0;
}
template <typename T>
BasicVector<T>::~BasicVector()
{
delete[] data;
}
template <typename T>
void BasicVector<T>::push_back(T element)
{
if (vector_size == vector_capacity)
{
resize();
}
data[vector_size] = element;
vector_size++;
}
template <typename T>
void BasicVector<T>::insert(int elemNum, T element)
{
if (vector_size == vector_capacity)
{
resize();
}
T* temp = new T[vector_size];
for (int i = 0; i < vector_size; i++)
{
temp[i] = data[elemNum + i - 1];
}
for (int j = 0; j < vector_size; j++)
{
data[elemNum + j] = temp[j];
}
data[elemNum - 1] = element;
vector_size++;
delete[] temp;
}
template <typename T>
void theWorkingFunction(BasicVector<T> &vector)
{
{
int elemNum;
T element;
cin >> elemNum >> element;
vector.insert(elemNum, element);
}
{
T element;
cin >> element;
vector.push_back(element);
}
}
int main()
{
BasicVector<string> vector;
theWorkingFunction(vector);
return 0;
}