/
MorningKoffe
/
NewIntArray
Обзор
Документация
Войти
/
MorningKoffe
/
NewIntArray
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
IntegerArray.cpp
113 строк
3 KB
Tsidik Vitaliy
init
06 июн 2026, 21:06
06 июн 2026, 21:06
5788ef5
Код
Авторство
О чём код?
#include "IntegerArray.h" #include <algorithm> #include <iostream> #include <string> IntegerArray::IntegerArray(size_t length) : m_size(length), m_data(nullptr) { if (length == 0) { throw bad_length{}; } m_data = new int[length]; for (size_t i = 0; i < length; ++i) { m_data[i] = 0; } } IntegerArray::IntegerArray(const IntegerArray& other) : m_size(other.m_size), m_data(nullptr) { if (m_size <= 0) { throw bad_length{}; } m_data = new int[m_size]; std::copy(other.m_data, other.m_data + m_size, m_data); } IntegerArray& IntegerArray::operator=(const IntegerArray& other) { if (this != &other) { delete[] m_data; m_size = other.m_size; if (m_size == 0) { throw bad_length{}; } m_data = new int[m_size]; std::copy(other.m_data, other.m_data + m_size, m_data); } return *this; } IntegerArray::~IntegerArray() { delete[] m_data; } int& IntegerArray::at(size_t index) { if (index >= m_size || index < 0) { throw bad_range{index}; } return m_data[index]; } const int& IntegerArray::at(size_t index) const { if (index >= m_size || index < 0) { throw bad_range{index}; } return m_data[index]; } int& IntegerArray::operator[](size_t index) { if (index >= m_size || index < 0) { throw bad_range{index}; } return m_data[index]; } const int& IntegerArray::operator[](size_t index) const { if (index >= m_size || index < 0) { throw bad_range{index}; } return m_data[index]; } void IntegerArray::resize(size_t new_size) { if (new_size == 0) { throw bad_length{}; } int* new_data = new int[new_size]; size_t copy_count = std::min(m_size, new_size); std::copy(m_data, m_data + copy_count, new_data); delete[] m_data; m_data = new_data; m_size = new_size; for (size_t i = copy_count; i < new_size; ++i) { new_data[i] = 0; } } void IntegerArray::insert(size_t pos, int value) { if (pos > m_size) { throw bad_argument{"insert: position " + std::to_string(pos) + " is out of range (allowed in range: (0," + std::to_string(m_size) + ")"}; } resize(m_size + 1); for (size_t i = m_size - 1; i > pos; --i) { m_data[i] = m_data[i - 1]; } m_data[pos] = value; } void IntegerArray::erase(size_t pos) { if (pos >= m_size || pos < 0) { throw bad_range{pos}; } for (size_t i = pos; i < m_size - 1; ++i) { m_data[i] = m_data[i + 1]; } resize(m_size - 1); }