|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.05.2017, 16:36 | #1 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
Очистка кастомного вектора
Мне нужно реализовать класс вектора и сейчас я работаю над функцией очистки вектора, но мне непонятно, каким должен стать вектор после вызова этой функции. Ясно, что в нем не должно остаться элементов. А что происходит с массивом элементов при очистке? Каким образом элементы очищаются?
Все, до чего я додумался, это: 1. Заполнить массив какими-то пустыми элементами 2. Удалить массив, но запомнить его размер и создать новый массив. Как правильно сделать очистку? |
17.05.2017, 16:46 | #2 | |||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
Цитата:
Цитата:
|
|||
17.05.2017, 17:08 | #3 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
>Вызовом деструкторов, как всегда.
То есть в цикле делать как-то так: elements[i].~TData()? А если вектор состоит из int? |
17.05.2017, 17:27 | #4 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
С++ Standard 12.4 p16
Цитата:
|
|
17.05.2017, 17:36 | #5 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 735
|
Если класс основан на массиве, то в конце(в деструкторе класса) делаешь просто вот так и все:
Код:
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
17.05.2017, 17:49 | #6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Cuprum5, точно для любого массива прокатит? Точно вызовутся деструкторы всех элементов, а не только самого массива? Точно не будет замедления, если каждый раз пересоздавать?
|
17.05.2017, 18:16 | #7 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Код:
Последний раз редактировалось Croessmah; 17.05.2017 в 18:19. |
|
18.05.2017, 08:49 | #8 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 735
|
- ясно-понятно, что только для одномерного, для двухмерного надо удалять так:
Код:
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
18.05.2017, 08:52 | #9 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 735
|
И кстати, этот способ должен использоваться только если Вы создали масси в при помощи оператора new. Если же Вы создали массив при помощи оператора malloc(), то удалять нужно free().
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
18.05.2017, 11:19 | #10 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Переставайте путать операторы с функциями и new-expression с operator new,
а то загадите человеку мозг заведомо ложными данными. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi посчитать длину вектора по всем известной формуле (корень из суммы квадратов координат вектора) | anna77777 | Помощь студентам | 2 | 06.01.2017 03:13 |
за максимальным элементом вектора С вставить максимальный элемент вектора А, иначе удалить все отрицательные элементы | DIbmKa | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 12.12.2016 20:09 |
Не отображается контент из кастомного ScrollViewer | Joose | WPF, UWP, WinRT, XAML | 0 | 09.07.2015 21:44 |
Даны два вектора b=(b1,b2,...,b6),x=(x1,x2,...,x6) и матрица А(6х6).написать программу вычисления длины вектора Ax-b. | infern_o | Паскаль, Turbo Pascal, PascalABC.NET | 10 | 21.03.2013 10:50 |
дано 3 вектора. определить максимальный чётный элемент каждого вектора и упорядочить по убыванию | 3Doleg | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 04.12.2012 01:45 |