Closed GoogleCodeExporter closed 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
Original comment by dmitryba...@gmail.com
on 25 May 2013 at 8:44
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
Original comment by dmitryba...@gmail.com
on 26 May 2013 at 10:21
Решение принято.
Original comment by aivyu...@gmail.com
on 27 May 2013 at 7:35
Original issue reported on code.google.com by
dmitryba...@gmail.com
on 10 Mar 2013 at 8:01