1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
|||||||||||
1 | |||||||||||
Реализация классов вектор и строка18.05.2012, 20:37. Показов 14422. Ответов 37
Метки нет (Все метки)
Для лабораторной работы нужно было написать свою реализацию классов вектор и строка.
Выкладываю что получилось, может, кому пригодится. Кому не лень, пожалуйста, просмотрите код, скажите, что не так сделано, какие есть ошибки, чего не хватает и т.д. mvector
mstring
7
|
18.05.2012, 20:37 | |
Ответы с готовыми решениями:
37
Вектор классов. Реализация сортировки не работает Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы Создать иерархию классов вектор(longint) и безопасный вектор с проверкой выхода за пределы |
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
|
12.07.2012, 21:26 [ТС] | 21 |
std::initializer_list добавлю, ток придется на liveworkspace сразу писать
ещеб неплохо добавить reserve shrink_to_fit emplace emplace_back с именами чет попутал. отрабатывает мож и корректно, но по сути там методы T && копия const T&, а вроде как с Rvalue Reference немного по другому надо работать. или по другому нужно только для конструктора и оператора копии? Добавлено через 3 минуты а как например с resize поступать? выделять только сколько требуется? Добавлено через 7 минут я старался предоставить как можно больше интерфейса + попробовать сделать stl совместимым(получилось или нет без понятия) вообще интересный пример, надо будет по изучать. особо в велосипедирование пока не ударялся хотя бы потому что особо не знаю как...
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
12.07.2012, 21:33 | 22 |
softmob, насколько я помню (когда тестил этот класс), он получился stl-совместимым (скорее всего, только до некоторой степени, подробно не проверял). По крайней мере, std::sort и std::copy с ним работали.
0
|
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
||||||
13.07.2012, 17:08 [ТС] | 24 | |||||
добавил вроде все интерфейсные функции аналогичные std::vector
переделал выделение памяти, теперь резервирование происходит только при добавлении элементов или при использование reserve подправил Rvalue Reference методы, ну и так по мелочи немного подправил
как считаете что здесь неплохо бы изменить?
0
|
13.07.2012, 17:43 | 25 | |||||
Остальное не смотрел.
0
|
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
||||||
13.07.2012, 18:42 [ТС] | 26 | |||||
если исправить оператор переноса конструктор будет корректным...
0
|
13.07.2012, 19:19 | 27 | |||||
Да, но я не вижу смысла инициализировать переменные нулем, а затем для объекта вызывать оператор присваивания.
Добавлено через 7 минут Да, иначе будет вызван конструктор копирования
Добавлено через 12 минут Объектов для перемещения/копирования нет, различий по времени тоже не должно быть.
0
|
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
|
17.07.2012, 00:21 [ТС] | 28 |
Добавлено через 4 минуты Кстати как правильнее разбивать на файлы? В литературе обычно предлагают стандартное разделение на .h + .cpp Однако глянув на реализацию стандартной библиотеке, наблюдаешь в .h реализацию вместо объявлений + фалы без расширения содержащих в gcc инклуды, а в студии код реализации и инклюды зависимых фалов. Как все же лучше и когда что использовать?
0
|
17.07.2012, 06:26 | 29 |
softmob, Все шаблоны должны подключаться(и определения, и реализация), поэтому я их разбиваю на hpp и ipp, а затем подключаю их в отдельный файл. Соответственно, при написании программы подключаю только его.
0
|
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
||||||
25.08.2012, 20:15 [ТС] | 30 | |||||
что за ipp?
Добавлено через 1 минуту немного переделал с использованием enable_if
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
25.08.2012, 20:26 | 31 | |||||
softmob, Расширение файла вообще не суть. .ipp используется к примеру бустом для переноса реализации шаблонных классов/функций туда, соответствено в .hpp подключается данный .ipp файл.
Добавлено через 2 минуты
0
|
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
|
25.08.2012, 20:53 [ТС] | 32 |
объявления методов класс брал с http://en.cppreference.com/w/cpp/container/vector
там initializer_list по значению принимают и кстати все примерах которые находил initializer_list тоже используется по значению
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
25.08.2012, 21:03 | 33 |
softmob, Да окей. Надо было мне в стандарт посмотреть, прежде чем писать.
Copying an initializer list does not copy the underlying elements.
0
|
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
|
|
25.08.2012, 21:31 [ТС] | 35 |
чет я так и не разберусь с Rvalue Reference
0
|
25.08.2012, 22:14 | 36 | ||||||||||
Пытался написать код, объясняющий r-ref, в итоге - запутался сам
out
Удивило то, что const int& не кастуется в int&&. Из всего остального можно сделать вывод - если хотите, чтобы r-reference переменная продолжила свой путь по функциям именно как r-reference, то передавать ее надо исключительно через std::move.
1
|
27.08.2012, 07:07 | 37 | |||||||||||||||
Дубль 2.
Я несколько заблуждался в использовании в функции, принимающей r-ref, std::move, для последующей передачи аргумента, поскольку он может передаваться не только как r-reference, но и как l-reference.
Ну и касаемо невозможности кастования c-ref в r-ref. Полагаю, все дело в этом
1
|
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
|
||||||
25.12.2016, 23:10 | 38 | |||||
Можно было в принципе через наследование определить:
0
|
25.12.2016, 23:10 | |
25.12.2016, 23:10 | |
Помогаю со студенческими работами здесь
38
Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов) Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс Как заполнить вектор на вектор классов Реализация классов-наследников или классов-родителей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |