divyang4481 / mipt-hw

Automatically exported from code.google.com/p/mipt-hw
0 stars 0 forks source link

task01_TVector (Таташина) #187

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
task01_vector/main.cpp  

Original issue reported on code.google.com by anna.tat...@gmail.com on 10 Mar 2013 at 8:37

GoogleCodeExporter commented 9 years ago
Не тот адрес указала :(

tatashina_anna/task01_vector/

А еще я никак не могу понять, как должен 
выглядеть адекватный swap. Так, как я его 
написала - он работать не хочет.

Original comment by anna.tat...@gmail.com on 10 Mar 2013 at 9:08

GoogleCodeExporter commented 9 years ago
Сначала ответь на такой вопрос:
Зачем вообще нужно реализовывать метод swap, 
если есть встроенная функция swap?

Original comment by aivyu...@gmail.com on 10 Mar 2013 at 9:19

GoogleCodeExporter commented 9 years ago
Вопрос повис в воздухе :)

Original comment by aivyu...@gmail.com on 6 Apr 2013 at 6:33

GoogleCodeExporter commented 9 years ago
0. Warnings:
main.cpp: In member function ‘T& TVector<T>::operator[](int) [with T = 
int]’:
main.cpp:79: warning: control reaches end of non-void function

1. Не вижу проверок на утечки памяти.

2. Size(), Capacity(), Front(), Back() невозможно вызывать у 
константного вектора.

3. Невозможно проитерироваться по 
константному вектору, т.к. у него 
невозможно вызывать Begin(), End().

4. Resize() должен принимать требуемый размер 
вектора.
Reserve() - требуемый размер внутреннего буфера.
Читайте внимательно документацию:
http://cplusplus.com/reference/vector/vector/resize/?kw=vector%3A%3Aresize
http://cplusplus.com/reference/vector/vector/reserve/?kw=vector%3A%3Areserve
Напоминаю, что необходимо реализовать 
методы, указанные в задании. Их поведение 
должно быть "как в STL".

5. Конструктор копирования не 
переопределен. Поэтому простой код 
вызывает утечки:
vector<int> a;
...
vector<int> b(a):
Объясните почему.

Решение не принято.

Original comment by aivyu...@gmail.com on 6 Apr 2013 at 6:45

GoogleCodeExporter commented 9 years ago
Фишка в том, что когда я не переопределила 
конструктор копирования, он создает его 
сам. Он просто копирует все поля. 
Происходит неглубокое копирование. Т.е. 
указатель копируется, а сам массив нет. Т.е. 
предположим у b был свой указатель на 
какой-то массив. А а этот массив 
переопределил. В итоге все, на что указывал 
b - утекло.

Original comment by anna.tat...@gmail.com on 27 May 2013 at 12:32

GoogleCodeExporter commented 9 years ago
Не собирается:
main.cpp: In copy constructor ‘TVector<T>::TVector(TVector<T>&)’:
main.cpp:25: error: ‘Buf’ was not declared in this scope
main.cpp: In member function ‘void TVector<T>::Resize()’:
main.cpp:54: error: ‘n’ was not declared in this scope
main.cpp: In member function ‘const T* TVector<T>::begin() const’:
main.cpp:77: error: ‘Buf’ was not declared in this scope
main.cpp: In member function ‘const T* TVector<T>::end() const’:
main.cpp:83: error: ‘Buf’ was not declared in this scope

Original comment by aivyu...@gmail.com on 27 May 2013 at 7:37

GoogleCodeExporter commented 9 years ago

Original comment by anna.tat...@gmail.com on 27 May 2013 at 7:58

GoogleCodeExporter commented 9 years ago
0. Warning:
main.cpp: In member function ‘T& TVector<T>::operator[](int) [with T = 
int]’:
main.cpp:89: warning: control reaches end of non-void function

Кстати, это предупреждение указывает на 
очень грубую ошибку, которая как правило 
приводит к проезду по памяти. А вообще по 
стандарту - UB.

1. Не вижу проверок на утечки памяти.

Original comment by aivyu...@gmail.com on 27 May 2013 at 8:02

GoogleCodeExporter commented 9 years ago

Original comment by anna.tat...@gmail.com on 27 May 2013 at 10:36