/
Xakka
/
CPP2
Обзор
Документация
Войти
/
Xakka
/
CPP2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/s21_array.tpp
221 строка
6 KB
moshedur
master: release 1.0
04 янв 2025, 23:35
04 янв 2025, 23:35
1c45f0a
Код
Авторство
О чём код?
#include "s21_array.h" namespace s21 { /** * @brief Конструктор копирования * * @tparam value_type тип данных * @tparam N кол-во элементов * @param a копируемый массив */ template <typename value_type, size_t N> s21_array<value_type, N>::s21_array(const s21_array &a) { if (N != a.size_) throw std::runtime_error("copy failed"); std::copy(a.array_, a.array_ + a.size_, array_); } /** * @brief Конструктор списка инициализаторов * * @tparam value_type тип данных * @tparam N кол-во элементов * @param items список инициализаторов */ template <typename value_type, size_t N> s21_array<value_type, N>::s21_array( std::initializer_list<value_type> const &items) { if (items.size() > N) throw std::runtime_error("copy failed"); size_ = items.size(); std::copy(items.begin(), items.end(), array_); } /** * @brief Конструктор перемещения * * @tparam value_type тип данных * @tparam N кол-во элементов * @param a копируемый массив */ template <typename value_type, size_t N> s21_array<value_type, N>::s21_array(s21_array &&a) noexcept : s21_array(a) {} /** * @brief Присваивание * * @tparam value_type тип данных * @tparam N кол-во элементов * @param a копируемый массив * @return Ссылка на себя */ template <typename value_type, size_t N> typename s21_array<value_type, N>::s21_array & s21_array<value_type, N>::operator=(s21_array &&a) noexcept { if (this == &a) { return *this; } if (this != &a) { std::copy(a.array_, a.array_ + a.size_, array_); size_ = a.size_; } return *this; } /** * @brief Обращение к элементу(безопасное) * * @tparam value_type тип данных * @tparam N кол-во элементов * @param pos индекс * @return значене массива */ template <typename value_type, size_t N> typename s21_array<value_type, N>::reference s21_array<value_type, N>::at( size_type pos) { if (pos > size_) throw std::out_of_range("Incorrect index"); return array_[pos]; } /** * @brief Обращение к элементу * * @tparam value_type тип данных * @tparam N кол-во элементов * @param pos индекс * @return значене массива */ template <typename value_type, size_t N> typename s21_array<value_type, N>::reference s21_array<value_type, N>::operator[](size_type pos) { return array_[pos]; } /** * @brief Доступ к первому элементу * * @tparam value_type тип данных * @tparam N кол-во элементов * @return константный ссылочный тип */ template <typename value_type, size_t N> typename s21_array<value_type, N>::const_reference s21_array<value_type, N>::front() { return array_[0]; } /** * @brief Доступ к последнему элементу * * @tparam value_type тип данных * @tparam N кол-во элементов * @return константный ссылочный тип */ template <typename value_type, size_t N> typename s21_array<value_type, N>::const_reference s21_array<value_type, N>::back() { return array_[size_ - 1]; } /** * @brief Итератор на начало массива * * @tparam value_type тип данных * @tparam N кол-во элементов * @return итератор на начало */ template <typename value_type, size_t N> typename s21_array<value_type, N>::iterator s21_array<value_type, N>::begin() { return array_; } /** * @brief Итератор на конец массива * * @tparam value_type тип данных * @tparam N кол-во элементов * @return итератор на конец */ template <typename value_type, size_t N> typename s21_array<value_type, N>::iterator s21_array<value_type, N>::end() { return array_ + size_; } /** * @brief Получение итератора на массив * * @tparam value_type тип данных * @tparam N кол-во элеметов * @return итератор на массив */ template <typename value_type, size_t N> typename s21_array<value_type, N>::iterator s21_array<value_type, N>::data() { return array_; } /** * @brief Проверка на пустоту * * @tparam value_type тип данных * @tparam N кол-во элементов * @return true * @return false */ template <typename value_type, size_t N> bool s21_array<value_type, N>::empty() { return !size_; } /** * @brief Кол-во элементов * * @tparam value_type тип данных * @tparam N кол-во элементов * @return кол-во элементов */ template <typename value_type, size_t N> typename s21_array<value_type, N>::size_type s21_array<value_type, N>::size() { return size_; } /** * @brief Максимально возможное кол-во элементов * * @tparam value_type тип данных * @tparam N кол-во элементов * @return максимально возможное кол-во */ template <typename value_type, size_t N> typename s21_array<value_type, N>::size_type s21_array<value_type, N>::max_size() { return N; } /** * @brief Замена содержимого массива * * @tparam value_type тип данных * @tparam N кол-во элементов * @param other массив для замены */ template <typename value_type, size_t N> void s21_array<value_type, N>::swap(s21_array &other) { if (size_ != other.size_) throw std::runtime_error("swap failed"); if (this != &other) { std::swap(array_, other.array_); std::swap(size_, other.size_); } } /** * @brief Присваевает заданное значение всем элементам * * @tparam value_type тип данных * @tparam N кол-во элементов * @param value значение */ template <typename value_type, size_t N> void s21_array<value_type, N>::fill(const_reference value) { for (size_type i = 0; i < size_; i++) array_[i] = value; } } // namespace s21