Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <typeinfo>
- using namespace std;
- template <typename T>
- class Vector {
- public:
- Vector() : size(0), capacity(4), arr(new T[4]) {}
- void Push_back(const T value) {
- if (size == capacity) {
- T* temp = new T[capacity * 2];
- for (int i = 0; i < size; i++) {
- temp[i] = arr[i];
- }
- delete[] arr;
- arr = temp;
- capacity *= 2;
- }
- arr[size] = value;
- size++;
- }
- void Insert(int index, const T value) {
- if (index < 0 || index >= size) {
- throw out_of_range("Невалидный индекс");
- }
- if (size == capacity) {
- T* temp = new T[capacity * 2];
- for (int i = 0; i < size; i++) {
- temp[i] = arr[i];
- }
- delete[] arr;
- arr = temp;
- capacity *= 2;
- }
- for (int i = size; i > index; i--) {
- arr[i] = arr[i - 1];
- }
- arr[index] = value;
- size++;
- }
- void Print() {
- for (int i = 0; i < size; i++) {
- cout << arr[i] << " ";
- }
- cout << endl;
- }
- ~Vector() {
- delete[] arr;
- }
- private:
- int size;
- int capacity;
- T* arr;
- };
- int main() {
- setlocale(LC_ALL, "ru");
- Vector<int> vec;
- for (int i = 0; i < 5; i++) {
- vec.Push_back(i + 1);
- }
- vec.Print();
- try {
- vec.Insert(8, 10);
- }
- catch (const logic_error& ex) { // здесь ловим любые ошибки типа logic_error
- cout << ex.what() << endl;
- }
- catch (...) {
- cout << "Другая ошибка" << endl; // например сюда может попасть bad_alloc при увеличении емкости вектора в двое и нехватке на это места в оперативной памяти
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement