заворачивать? Или он очистится и удалится при удалении объекта этого класса?
У него вызовется деструктор, и он сам почистится. Умный указатель здесь не нужен
Понял, благодарю
Деструктор класса вызовет все деструктора своих полей. По умолчанию.
Не нужно
*После деструктора класса вызовутся деструкторы всех его полей в обратном порядке
Еще вопрос, Как работает vector.push_back? Если все Клементе вектора забиты, он перекопирует весь вектор с размером +1 и добавит в конец? И если не весь вектор забит, то он поступит так же?
Не +1, а *2. Грубо
Если я не ошибаюсь, то это зависит от компилятора
От реализации стандартной библиотеки
Ну да. Мутно написал. Сначала вызовутся деструктора под объектов, а потом деструктор самого. Но смысл в том, что для вызова деструктора полей никаких усилий прилагать не надо - само.
У вектора есть size, и есть capacity. Capacity каждый раз умножается на константу, когда size становится равен capacity. Асимптотика количества перемещений получится O(N), где N — количество вставок.
Неправда что?
Мне нужно vector превратить в фифо очередь(просто нужно, не спрашивайте зачем). Моя реализация - гавно полное, как я понял, ведь каждый раз при вызове метода вектор будет копировать себя постоянно? ‘’’ template<typename T> class CustomQueue { public: CustomQueue(size_t size) : vector(size) {} T GetElement() { T element = vector.front(); vector.erase(vector.begin()); return element; } void AddElement(T element) { vector.push_back(element); } private: std::vector<T> vector; }; ‘’’
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Я знаю, что в стл такое есть, просто решаю задачки всякие и превратить именно вектор в очередь
С чего вы решили, что он себя будет копировать?
я ж юзаю пушбэк и фронт
И причем тут вектор?
Это не возможно. Вектор по определению непрерывная последовательность элементов. При добавлении и удалении он обязан переаллоцировпться. Обязан!!!! И только в некоторых реализациях и некоторых случаях в пределах своего capacity он случайно может не инвплидировпть свой контент. Случайно!
Что вы несете? при удалении элементов нет никакой переаллокации, все просто сдвигается к началу
То что двигается к началу инвплидируется
Плохая идея. Так то можно просто сделать std::queue<std::vector> Но будет плохо
Ну в целом это делается обратным спосоьом
> При добавлении и удалении он обязан переаллоцировпться. Обязан!!!! 1. При добавлении элемента при size() == capacity() 2. Всё?
https://en.cppreference.com/w/cpp/container/deque
Обсуждают сегодня