Opened 3 years ago

Closed 3 years ago

#284 closed ожидается проверка (задача сдана)

HW #6

Reported by: Daniil Lyubaev Owned by: Святослав Власов
Component: WW_vector Version: 3.0
Keywords: Cc:

Description


Change History (8)

comment:1 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

Не вижу твоего коммита в svn
Ты уверен, что закоммитил своё решение?

comment:2 Changed 3 years ago by Daniil Lyubaev

Видимо после svn add забыл коммит сделать, сейчас закоммитил.

comment:3 Changed 3 years ago by Daniil Lyubaev

Type: ожидаются исправленияожидается проверка

comment:4 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

Теперь вижу.

Во-первых, у тебя неправильно реализована логика увеличения размера вектора. При исчерпании свободного места его capacity должно увеличиваться в два раза, а у тебя оно увеличивается на единицу. Это трагически влияет на асимптотику операции вставки в конец.

Столько скобок в тернарном операторе избыточны, у тернарного оператора самый низкий приоритет, ниже него только операторы присваивания.

Last edited 3 years ago by Святослав Власов (previous) (diff)

comment:5 Changed 3 years ago by Daniil Lyubaev

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

Вроде поправил, теперь если _sz + 1 = _cp и вызывается insert() или push_back(), то _cp в два раза увеличивается.
Так же поправил resize(), чтоб он использовал reserve() и было поменьше одинакового кода.
Поправил insert() и push_back(), чтоб они использовали resize(), но теперь там пишется _sz - 1, кажется чуть-чуть читаемость упала, как лучше? Еще думал о том, чтоб в push_back(int value) просто вызывать insert(_sz, value), стоит ли?
Еще я немного не понял, надо ли при вызове resize(), если new_size больше чем 2 * _cp, делать _cp равным 2 * new_size? В описании лабораторной написано, что надо делать просто new_size, но при этом по логике вся зарезервированная память уже вроде как занята.

comment:6 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

В целом всё хорошо, пара замечаний:

  1. В конструкторе копирования и операторе присваивания не нужно копировать всё capacity элементов, достаточно size
  2. Ты слишком рано расширяешь память. При _sz == _cp у тебя еще есть место под элемент, а ты уже реаллоцируешь память.

В остальном хорошо, push_back заменять insert'ом не надо, про new_size у тебя всё правильно сделано.

comment:7 Changed 3 years ago by Daniil Lyubaev

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:8 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed

Все ок, зачтено.

Note: See TracTickets for help on using tickets.