2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
|
|
1 | |
Что происходит при удалении/добавлении элемента в контейнер vector?14.05.2013, 20:30. Показов 1572. Ответов 11
Метки нет (Все метки)
0
|
14.05.2013, 20:30 | |
Ответы с готовыми решениями:
11
При добавлении (удалении) данных в DataGrid не происходит обновление Возникает ли событие в Listbox при добавлении или удалении элемента При удалении элемента из списка происходит непонятная ошибка Что происходит внутри Windows при установке и удалении программ? |
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
|
|
14.05.2013, 20:33 [ТС] | 3 |
А мне не важно, главное суть понять Расскажите пожалуйста про любую
0
|
Неэпический
|
|
14.05.2013, 20:35 | 4 |
Но в общих чертах проверяется хватает ли нам запаса выделенной уже памяти(capacity) и если нет, то перевыделяем. Потом добавление.
Добавлено через 1 минуту При удалении - вызов деструкторов для удаляемых объектов, сдвиг всего что "правее" удаляемого элемента "влево"
1
|
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
|
|
14.05.2013, 20:37 [ТС] | 5 |
А при добавлении элементов методом resize получается на каждый элемент вызывается конструктор?
0
|
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
|
|
14.05.2013, 20:48 [ТС] | 7 |
А у простых типов char, int, float и структур элементов простых типов конструктора вроде как нет...? Получается в их случае просто выделяется кусок памяти без вызова конструктора? Или нет?
0
|
Неэпический
|
||||||
14.05.2013, 20:57 | 8 | |||||
Это шаблонный класс, поэтому все одинаково.
Добавлено через 7 минут Вот Вам интересный пример:
1
|
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
|
|
14.05.2013, 20:59 [ТС] | 9 |
Получается при добавлении множества элементов типа структура простых типов методом resize для каждого элемента вызывается конструктор, который по сути ничего не делает... мне вот этот момент не понятен, вродеж такого не должно быть, не оптимально выходит. Может это дело оптимизирует компилятор?
0
|
Неэпический
|
|
14.05.2013, 21:09 | 10 |
Вы сделали resize - значит теперь в векторе будет другое кол-во элементов(resize увеличивает кол-во элементов, в векторе, а не просто память резервирует), а это значит ,что для каждого из них должен быть вызван конструктор
0
|
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
|
|
14.05.2013, 21:27 [ТС] | 11 |
Я просто не соображу. Вот есть еще методы reserve и clear, и у них всех сложность O(n), т.е. зачем-то вызываются конструкторы и деструкторы, когда допустим в случае с clear можно просто объявить его пустым обнулив счетчик элементов. Память при clear всеравно не освобождается, а вероятность что будут добавлены новые элементы есть и для них будут опять вызываться конструкторы... Я что-то не допонимаю, наверняка в этом есть смысл?
0
|
Неэпический
|
|
15.05.2013, 08:39 | 12 |
Тогда объект так и останется не уничтоженным. А там во-первых, могла быть выделена динамически память, во-вторых, подсчет ссылок и тому подобное. В приведенном мною примере уберите деструктор. И в конце получите уже не ноль, хотя должен быть именно ноль
Добавлено через 2 минуты Для простых типов его можно просто объявить пустым, а для корректного удаления объектов сложных классов необходим вызов деструктора.
0
|
15.05.2013, 08:39 | |
15.05.2013, 08:39 | |
Помогаю со студенческими работами здесь
12
Реализовать List так, что при добавлении элемента в конец, удаляется тот, что в начале Ошибка при добавлении и удалении Vector subscript out of range при удалении Пауза при удалении, добавлении класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |