Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
2 / 2 / 0
Регистрация: 16.08.2020
Сообщений: 25
1

Деструкторы элементов вектора

16.08.2020, 20:37. Показов 2946. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Я изучаю С++ и написал простой класс, который выводит сообщения каждый раз, когда создается объект и когда он удаляется и создал вектор элементов этого класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class test{
private:
int x;
public:
    test(int nmb):x(nmb){
        cout << "Сoздан элемент номер "<<x<<endl;}
    
    ~test(){
        cout << "Удалeн  "<<x<< endl;
    }
};
 
int main(){
vector<test> v;
for (int i = 0; i < 10; ++i){
test ts(i);
v.push_back(ts);
}}
Результат очень озадачивает:
Код
Сoздан элемент номер 0
Удалeн  0
Сoздан элемент номер 1
Удалeн  0
Удалeн  1
Сoздан элемент номер 2
Удалeн  0
Удалeн  1
Удалeн  2
Сoздан элемент номер 3
Удалeн  3
Сoздан элемент номер 4
Удалeн  0
Удалeн  1
Удалeн  2
Удалeн  3
Удалeн  4
Сoздан элемент номер 5
Удалeн  5
Сoздан элемент номер 6
Удалeн  6
Сoздан элемент номер 7
Удалeн  7
Сoздан элемент номер 8
Удалeн  0
Удалeн  1
Удалeн  2
Удалeн  3
Удалeн  4
Удалeн  5
Удалeн  6
Удалeн  7
Удалeн  8
Сoздан элемент номер 9
Когда я испытывал программу на векторе из 5 элементов, я решил, что с++ сначала создает вектор из 0 элементов, удаляет его, потом вектор из двух, удаляет и т.д. и т.п. пока не достигнет вектора заданного размера.
Но когда я увеличил размер вектора до 10, после 4ого это стало работать как-то иначе.
Как это все работает?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2020, 20:37
Ответы с готовыми решениями:

Найти сколько элементов первого вектора совпадают с элементами второго вектора
#include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;vector&gt; #include &lt;set&gt; using namespace std; ...

Определить количество положительных элементов вектора С(10) и заменить этим значением минимальный элемент вектора А(5)
Ребята помогите пожалуйста с задачкой. Я сам не шарю в C++, но в этом семестре появился этот...

Составить главную программу и функцию. Для данного вектора А(М) найти количество неповторяющихся элементов вектора
Здравствуйте. Буду очень благодарен,если кто нибудь напишет два кода к этим задачам. Спасибо за...

Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после...

25
Avazart
17.08.2020, 22:30     Деструкторы элементов вектора
  #21

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
стыдно, особенно учитывая свинство.
Кто бы хрюкал...
Про не отформатированный чудо-код вообще молчу.

Жалкие попытки по умничать закончились тем что и всегда.

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
17.08.2020, 22:37 22
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Причём тут список? Этот алгоритм будет достаточно эффективно работать для любых структур у которых время доступа по индексу константное, например для циклического буфера, массива блоков, хэш-таблицы в конце-концов.
Я к тому, что "достаточно", это не о векторе или массиве. Тема топика о праве на жизнь именно вектора.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Мне в свое время весьма удивил такой подход к реализации std::list<>::sort, особенно если учесть, что раньше обычно использовался merge sort по стратегии снизу-вверх, которому не требуется такое неэффективное деление пополам. Я задал соответствующий вопрос на SO. В ответах объясняются причины такого решения.
TheCalligrapher, я уже сказал о том, что
Цитата Сообщение от IGPIGP Посмотреть сообщение
С++ это об эффективности. То есть подразумевается.
Вы наверное видели в моем блоге о структуре поиска. Там и вектор и списки и... И можно даже список пирамидой упорядочить... Вопрос - зачем? Вектор - прекрасная структура и его сила в том, что он быстро сортируется и быстро ищется. Есть и другие моменты, но перечисленное - главное (имхо).
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12812 / 6684 / 1800
Регистрация: 18.10.2014
Сообщений: 16,935
17.08.2020, 22:40 23
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Возьмите, к примеру, современную реализацию std::list<>::sort в стандартной библиотеке, идущей с GCC, Clang или MSVС++ [...] и потом честно пробегают по всему связанному списку от начала
...Хотя возможно некоторые из этих реализаций уже нашли способы обойтись без этого странного решения.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.08.2020, 00:35 24
Ещё раз. Не растекаясь по древу. Реалокация - борьба за непрерывность. Цель - быстрая бинарная поддержка и возможность размещения в кеше одним куском.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Хотя возможно некоторые из этих реализаций уже нашли способы обойтись без этого странного решения.
Для самого списка (не по теме) это не плохое решение. Оне не такое быстрое как для вектора но на без директакзесье станешь последовательно итерировать. Там трудно что-то ещё придумать.
Моя мечта закончить список в стиле контейнера. Полноценном. То есть на базе того -что ячейка - контейнер. А список - контейнерер (контейнеровоз). Тогда лочить можно отдельные контейнеры не блокируя весь список. Он как структура не нуждается в глобальном локе на уровне объекта, как вектор. Его итераторы валиднаы там где они не затронуты (не залочены по зымыслу, при многопоточном доступе). В этом случае список с алокатором в виде непрерывного куска памяти может оказаться незнакомым многим, но очень красивым.

Добавлено через 1 час 8 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Мне в свое время весьма удивил такой подход к реализации std::list<>::sort, особенно если учесть, что раньше обычно использовался merge sort по стратегии снизу-вверх, которому не требуется такое неэффективное деление пополам. Я задал соответствующий вопрос на SO. В ответах объясняются причины такого решения.
TheCalligrapher, сейчас только, учитывая мой английский и время (только сейчас выделилось) распарсил обсуждение на stack'е. Там в принципе как раз то, что я написал интуитивно. Бинарный поиск даёт логарифм итераций, а каждая из них даёт N/2n итераций по элементам (где n -глубина шага внешней итерации). Там оппонент это упрощает и полагает что оно пропорционально просто N и в результате получается N*Log2(N). А на деле то еще меньше.
То есть, бинарные алгоритмы возможны и на последовательных структурах. Это так же верно, как то, что корова на коньках быстрее коровы без коньков.
Но вопрос вектора о том, что это его стихия. Деревья из-за аллокации не кэш-френдли структуры в том виде в котором они существуют. Поэтому из природная совместимость с бинарными алгоритмами наталкивается на серьёзное препятствие, которого у вектора нет. В этом смысле ему и равных нет. Именно это я имел ввиду. А спорить о сложном можно на каждом шагу. Я не против. Лишь бы уровень обсуждения не опускался до плинтуса.
0
AndryS1
18.08.2020, 00:47
  #25

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
не по теме
на форуме есть теги для оффтопа

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.08.2020, 00:53 26
Цитата Сообщение от AndryS1 Посмотреть сообщение
на форуме есть теги для оффтопа
AndryS1, я рад встретить человека, который расскажет мне об этом форуме.
И в конце такой темы как эта. Хотите обсудить тему или правила хорошего тона?
0
18.08.2020, 00:53
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.08.2020, 00:53
Помогаю со студенческими работами здесь

Заданы три вектора a(n), b(m), c(k). Вывести наименование вектора, в котором максимальна сумма четных элементов, стоящих на нечетных местах
Заданы три вектора a(n), b(m), c(k). Вывести наименование вектора, в котором максимальна сумма...

Выделение столбцов из матрицы, сортировка полученного вектора, перестановка элементов вектора
Здравствуйте!Нужна помощь в пояснении. Дано задание в файле.По раздельности я примерно понимаю как...

Даны 2 вектора определить у какого вектора наибольшее количество положительных элементов
Даны 2 вектора определить у какого вектора наибольшее количество положительных элементов. Программу...

Заполнить вектор значениями положительных элементов вектора C. Размерность вектора C произвольная
Заполнить вектор значениями положительных элементов вектора C. Размерность вектора C произвольная....

Сумма элементов вектора между min и последним элементом вектора
33 строчка - сумма элементов вектора между min и последним элементом вектора, исправьте,...

Вывести элемент вектора на пересечении двух элементов этого вектора
Есть 2 переменных Rwork и uр.р, где Rworkпринимает значения от 1 до 3 с шагом 1, а uр.р от 1 до 9 с...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru