Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121

Что происходит при удалении/добавлении элемента в контейнер vector?

14.05.2013, 20:30. Показов 1805. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните пожалуйста, какие этапы проходят при добавлении и удалении элемента из контейнера
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2013, 20:30
Ответы с готовыми решениями:

При добавлении (удалении) данных в DataGrid не происходит обновление
Пытаюсь создать часть приложения, которая позволяет работать со списком пользователей (редактирование, добавление, удаление). Пишу с...

Возникает ли событие в Listbox при добавлении или удалении элемента
Привет! Ребят, есть ли у Listbox событие, когда добавляется или удаляется item? Просмотрел доступные события в студии, но на первый...

При удалении элемента из списка происходит непонятная ошибка
Приложила файл, который должен лежать в папке с кодом. При выполнении на первом поиске ищете "nazv1", и потом его удаляете. И...

11
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
14.05.2013, 20:32
Цитата Сообщение от Cend Посмотреть сообщение
Объясните пожалуйста, какие этапы проходят при добавлении и удалении элемента из контейнера
Зависит от реализации
1
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
14.05.2013, 20:33  [ТС]
А мне не важно, главное суть понять Расскажите пожалуйста про любую
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
14.05.2013, 20:35
Но в общих чертах проверяется хватает ли нам запаса выделенной уже памяти(capacity) и если нет, то перевыделяем. Потом добавление.

Добавлено через 1 минуту
При удалении - вызов деструкторов для удаляемых объектов, сдвиг всего что "правее" удаляемого элемента "влево"
1
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
14.05.2013, 20:37  [ТС]
А при добавлении элементов методом resize получается на каждый элемент вызывается конструктор?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
14.05.2013, 20:41
Цитата Сообщение от Cend Посмотреть сообщение
А при добавлении элементов методом resize получается на каждый элемент вызывается конструктор?
Да. Конструктор без параметров.
1
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
14.05.2013, 20:48  [ТС]
А у простых типов char, int, float и структур элементов простых типов конструктора вроде как нет...? Получается в их случае просто выделяется кусок памяти без вызова конструктора? Или нет?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
14.05.2013, 20:57
Цитата Сообщение от Cend Посмотреть сообщение
Получается в их случае просто выделяется кусок памяти без вызова конструктора? Или нет?
Это шаблонный класс, поэтому все одинаково.

Добавлено через 7 минут
Вот Вам интересный пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>
 
class A{
public:
    A(){
        std::cout<<"Constructor A"<<std::endl;
        ++count;
    }
    A(const A & src){
        *this=src;
        std::cout<<"Copy constructor A"<<std::endl;
        ++count;
    }
    ~A(){
        std::cout<<"Destructor A"<<std::endl;
        --count;
    }
    static int count;
};
int A::count =0;
int main(){
 
    {
        std::vector<A> vec;
        A a;
        vec.push_back(a);
        vec.push_back(a);
        vec.push_back(a);
    }
 
        std::cout<<A::count<<std::endl;
        system("pause");
}
1
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
14.05.2013, 20:59  [ТС]
Получается при добавлении множества элементов типа структура простых типов методом resize для каждого элемента вызывается конструктор, который по сути ничего не делает... мне вот этот момент не понятен, вродеж такого не должно быть, не оптимально выходит. Может это дело оптимизирует компилятор?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
14.05.2013, 21:09
Цитата Сообщение от Cend Посмотреть сообщение
вродеж такого не должно быть, не оптимально выходит.
Вы сделали resize - значит теперь в векторе будет другое кол-во элементов(resize увеличивает кол-во элементов, в векторе, а не просто память резервирует), а это значит ,что для каждого из них должен быть вызван конструктор
0
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 121
14.05.2013, 21:27  [ТС]
Я просто не соображу. Вот есть еще методы reserve и clear, и у них всех сложность O(n), т.е. зачем-то вызываются конструкторы и деструкторы, когда допустим в случае с clear можно просто объявить его пустым обнулив счетчик элементов. Память при clear всеравно не освобождается, а вероятность что будут добавлены новые элементы есть и для них будут опять вызываться конструкторы... Я что-то не допонимаю, наверняка в этом есть смысл?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
15.05.2013, 08:39
Цитата Сообщение от Cend Посмотреть сообщение
когда допустим в случае с clear можно просто объявить его пустым обнулив счетчик элементов.
Тогда объект так и останется не уничтоженным. А там во-первых, могла быть выделена динамически память, во-вторых, подсчет ссылок и тому подобное. В приведенном мною примере уберите деструктор. И в конце получите уже не ноль, хотя должен быть именно ноль

Добавлено через 2 минуты
Для простых типов его можно просто объявить пустым, а для корректного удаления объектов сложных классов необходим вызов деструктора.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2013, 08:39
Помогаю со студенческими работами здесь

Что происходит внутри Windows при установке и удалении программ?
Привет всем. Интересует такой вопрос: какие процессы происходят когда мы устанавливаем программу? (когда удаляем , то тут понятно что...

Реализовать List так, что при добавлении элемента в конец, удаляется тот, что в начале
Добрый день. Не как не могу найти готовый способ цикличного листа, пример: у нас есть лист размером в 10 ячеек, когда заполняется последняя...

Ошибка при добавлении и удалении
В чем ошибка? при добавлении студента у меня фамилия пишется в поле номера зачётки, а номер зачётки в фамилии....также проблема с...

Vector subscript out of range при удалении
Здравствуйте! Не понимаю, как решить проблему. Помогите, кто может. #include &quot;group.h&quot; (нужная часть) typedef...

Пауза при удалении, добавлении класса
Нужно с паузой удалить класс. Вот так не работает: $('.z1').delay(5000).removeClass(&quot;z1&quot;).addClass(&quot;z2&quot;); Как сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru