divyang4481 / mipt-hw

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

Task_01 TVector #186

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago

/baldin_dima/TVector/

Original issue reported on code.google.com by dmitryba...@gmail.com on 10 Mar 2013 at 8:01

GoogleCodeExporter commented 9 years ago
Я переименовал папку с заданием. Не 
забудьте, пожалуйста, сделать svn update. А в 
будущем просьба называть их как указано в 
доке: taskXX_name. Мне так проще ориентироваться 
в Вашем коде.

0. Пишите, пожалуйста, комментарии на 
русском транслитом или на английском. У 
меня юникс, мне неудобно читать русские 
символы в кодироке windows-1251.

1. Код не компилируется:
vector.cpp:14: warning: friend declaration ‘void PrintVector(const 
TVector<T>&)’ declares a non-template function
vector.cpp:14: warning: (if this is not what you intended, make sure the 
function template has already been declared and add <> after the function name 
here) -Wno-non-template-friend disables this warning
vector.cpp: In member function ‘const T& TVector<T>::operator[](size_t) 
const’:
vector.cpp:60: error: expected identifier before ‘(’ token
vector.cpp:60: error: expected `;' before ‘(’ token
vector.cpp: In member function ‘const T* TVector<T>::end() const’:
vector.cpp:87: error: expected ‘;’ before ‘}’ token
vector.cpp: In member function ‘void TVector<T>::resize(size_t)’:
vector.cpp:111: error: there are no arguments to ‘Reserve’ that depend on a 
template parameter, so a declaration of ‘Reserve’ must be available
vector.cpp:111: error: (if you use ‘-fpermissive’, G++ will accept your 
code, but allowing the use of an undeclared name is deprecated)
vector.cpp: At global scope:
vector.cpp:179: error: too few template-parameter-lists
vector.cpp:180: error: too few template-parameter-lists
vector.cpp:182: error: ‘_TCHAR’ has not been declared
vector.cpp: In member function ‘void TVector<T>::printvector() [with T = 
int]’:
vector.cpp:190:   instantiated from here
vector.cpp:171: warning: comparison between signed and unsigned integer 
expressions

2. Утечки нужно проверять не для объекта 
TVector, а для объектов, которые мы в нем храним 
:) Первое проверять не имеет смысла, т.к. Вы 
ведь не создаете динамически объекты TVector.

3. Нет копирующего конструктора.

4. Лучше не заменять unsigned int и size_t. На 
некоторых платформах они могут не 
совпадать. В таком случае Ваш код может 
перестать компилироваться или 
компилируется, но работает неправильно.

5. Нет констатных версий front/back.

6. Методы size() и capacity() нельзя вызвать и у 
константного объекта. Это нелогично.

7. Ваш метод swap имеет сложность O(n) по памяти 
и по времени. Зачем он тогда вообще нужен, 
если есть встроенная функция swap с теми же 
свойствами?

8. Вы делаете метод printvector другом своего же 
класса. В чем смысл? :)

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

Original comment by aivyu...@gmail.com on 18 Mar 2013 at 8:50

GoogleCodeExporter commented 9 years ago

Original comment by dmitryba...@gmail.com on 25 May 2013 at 8:44

GoogleCodeExporter commented 9 years ago
1. Невозможно создать копию константного 
объекта.

2. Метод size() все еще нельзя вызвать у конст 
вектора.

3. Метод swap у Вас возвращает TVector, но в его 
коде это не отражено. В run-time это может 
привести к проезду по памяти (если 
пользователь обратится к вовзращаемому 
значению).

4. Добавляю в main() свой код:
        {
            TVector<myint> a;
            for (int i = 0; i < 10; ++i)
                a.push_back(myint());

            TVector<myint> b = a;
            for (int i = 0; i < 10; ++i)
                b.push_back(myint());

            a.swap(b);
        }
Пробую скомпилировать:
NewVector.cpp: In member function ‘TVector<T> TVector<T>::swap(TVector<T>&) 
[with T = myint]’:
NewVector.cpp:228:   instantiated from here
NewVector.cpp:62: error: no matching function for call to 
‘TVector<myint>::swap(size_t&, size_t&)’
NewVector.cpp:60: note: candidates are: TVector<T> 
TVector<T>::swap(TVector<T>&) [with T = myint]
NewVector.cpp:63: error: no matching function for call to 
‘TVector<myint>::swap(size_t&, size_t&)’
NewVector.cpp:60: note: candidates are: TVector<T> 
TVector<T>::swap(TVector<T>&) [with T = myint]
NewVector.cpp:64: error: no matching function for call to 
‘TVector<myint>::swap(myint*&, myint*&)’
NewVector.cpp:60: note: candidates are: TVector<T> 
TVector<T>::swap(TVector<T>&) [with T = myint]
NewVector.cpp:64: warning: no return statement in function returning non-void

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

Original comment by aivyu...@gmail.com on 26 May 2013 at 11:15

GoogleCodeExporter commented 9 years ago

Original comment by dmitryba...@gmail.com on 26 May 2013 at 10:21

GoogleCodeExporter commented 9 years ago
Решение принято.

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