Giter Club home page Giter Club logo

cpp-advanced-vector's Introduction

Vector

Реализация класса Vector, сравнимая по эффективности с std::vector Данные хранятся в памяти, динамически выделяемой в куче. При создании объекта выделяется неинициализированная память, инициализация происходит при фактическом добавлении элементов в вектор. Надёжен к возникновению исключений.

Функционал класса

Конструкторы, операторы присваивания и деструктор

  • Конструктор по умолчанию. Инициализирует вектор нулевого размера и вместимости. Не выбрасывает исключений.
  • Конструктор, который создаёт вектор заданного размера. Вместимость созданного вектора равна его размеру, а элементы проинициализированы значением по умолчанию
  • Копирующий конструктор. Создаёт копию элементов исходного вектора. Имеет вместимость, равную размеру исходного вектора, то есть выделяет память без запаса
  • Перемещающий конструктор. После перемещения новый вектор станет владеть данными исходного вектора. Исходный вектор будет иметь нулевой размер и вместимость и ссылаться на nullptr. Не выбрасывает исключений
  • Деструктор. Разрушает содержащиеся в векторе элементы и освобождает занимаемую ими память
  • Оператор копирующего присваивания. Базовая гарантия безопасности исключений
  • Оператор перемещающего присваивания. Не выбрасывает исключений

Модифицирующие методы

  • Reserve(size_t capacity): Резервирует достаточно места, чтобы вместить количество элементов, равное capacity. Если новая вместимость не превышает текущую, метод не делает ничего. В случае возникновения исключения должен оставлять вектор в прежнем состоянии. Метод перемещает элементы, если их конструктор перемещения не выбрасывает исключений или они не имеют конструктора копирования, в противном случае элементы копируются.
  • Swap: обмен содержимого вектора с другим вектором
  • Resize: изменяет количество элементов в векторе. Предоставляет строгую гарантию безопасности исключений, когда мove-конструктор у типа T объявлен как noexcept или тип T имеет публичный конструктор копирования. Если у типа T нет конструктора копирования и move-конструктор может выбрасывать исключения, метод PushBack предоставляет базовую гарантию безопасности исключений.
  • PushBack(const T& value): добавление нового значения в конец вектора. При нехватке памяти вместимость увеличинается в 2 раза. Предоставляет строгую гарантию безопасности исключений, когда мove-конструктор у типа T объявлен как noexcept или тип T имеет публичный конструктор копирования. Если у типа T нет конструктора копирования и move-конструктор может выбрасывать исключения, метод PushBack предоставляет базовую гарантию безопасности исключений.
  • PushBack(T&& value): перегрузка метода, которая принимает параметр по rvalue-ссылке
  • PopBack: разрушает последний элемент вектора и уменьшает размер вектора на единицу. Вызов PopBack на пустом векторе приводит к UB
  • EmplaceBack(Args&&... args): добавление нового элемента в конец вектора. Созданный объект должен быть сконструирован с использованием аргументов метода EmplaceBack. Принимает любое количество аргументов произвольного типа по Forwarding-ссылке. Строгая гарантия безопасности исключений, когда мove-конструктор у типа T объявлен как noexcept или тип T имеет публичный конструктор копирования. Иначе - базовая гарантия безопасности исключений
  • Emplace
  • Insert
  • Erase

Информация о состоянии

Тесты

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.