Opened 3 years ago

Closed 3 years ago

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

WW_vector [prudnikov.mark]

Reported by: Марк Прудников Owned by: Дмитрий Лапшин (lapshin)
Component: WW_vector Version:
Keywords: Cc:

Description


Change History (1)

comment:1 Changed 3 years ago by Дмитрий Лапшин (lapshin)

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

Комментарий после дедлайна.

assert инклудить полезно! И из operator = что-нибудь вернуть.

        this->resize(other._sz);
        this->reserve(other._cp);

        for (size_t i = 0; i < _sz; i++)
            this->_array[i].T(other._array[i]);

странный порядок действий, сначала resize, потом reserve, потом попытки вызвать конструктор уже в существующих объектах? Тем более ты уже копию взял в параметре.

Конструктор от числа делает неправильную капасити.

        for (size_t i = n; i != _sz - 1; i++)
            new(&_array[i]) T();

Точно resize_down? Кстати цикл не оценит нулевой сайз.

        if (n > _cp)
            reserve(2 * n);

Зачем в 2 раза больше-то? Да и условие лишнее.

this-> стараемся не писать. using namespace std; лучше не делать.

        _cp(2),
        _sz(0),
        _array((T*) new char[sizeof(T) * 2])

этим двум двойкам очень легко отвязаться друг от друга.

С инклуд файлами вообще стоит быть педантичнее:

  1. В "my_vector.hpp" хватит <cstdint> и <iosfwd>,
  2. В "my_vector_impl.hpp" надо подключить "my_vector.hpp" и <iostream>. Последний переезжает вверх если оператор вывода в первом файле написан, и там заменяет <iosfwd>.

Кстати про линковщик: у тебя функция-друг нешаблонная, а значит вне класса и без inline. Плюс, ну, если уж пишешь друга, надо его писать в пространстве имён.

Ну и формат вывода. И тогда работает!

Note: See TracTickets for help on using tickets.