Форум программистов, компьютерный форум CyberForum.ru

delete или new (typeid(void*))(void*) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ отсортировать текст http://www.cyberforum.ru/cpp-beginners/thread191343.html
Помогите плиз... Отсортировать текст по длине слов в порядке возрастания. В тексте несколько строк. Исходный текст должен содержаться в одном файле, результат — во втором файле. решение нужно в си.
C++ Поиск заданной буквы в строке. Определения количества слов В заданной строке определить количество слов, в которых заданная буква встречается больше одного раза. Язык С. Помогите пожалуйста! http://www.cyberforum.ru/cpp-beginners/thread191341.html
C++ Как прервать работу функции?
dot CrossLine (const line &L, const line &P, dot&D) { double z; z=Determin(L.A,L.B,P.A,P.B); if (fabs(z)<1e-12) { char S="Прямые не пересекаются"; CharToOem(S,S); cout<<S<<"\n"; }
C++ Как хранится __DATE__?
При компиляции можно вызвать макропеременную __DATE__ которая хранит текущую дату. Мне надо из этой даты по отдельности в 3 переменные вытащить год, месяц, день. Кто-нибудь не подскажет в какой форме хранится эта самая дата в __DATE__?
C++ самое короткое слово первой строки,которого нет во втором предложении http://www.cyberforum.ru/cpp-beginners/thread191322.html
Люди! Помогите,пожалуйста.. надо написать программу на С++ выводящую на экран самое короткое слово первой строки,которого нет во втором предложении ( соответственно даны 2 строки, вводятся с клавиатуры,как понимаю) я пересмотрела много книг..но проблема скорее не только в том,чтобы написать код..я не понимаю алгоритма
C++ Среднее арифметическое чисел между даными в массиве На Си написал всего пару задач,есть условие,и некоторые пункты я сделал но последний неясен. Полное условие: с помощью рандомизации задать массив с элементами в пределах от -10 до 20 (19 элементов) Найти максимум и минимум чисел в массиве Найти номер максимума и минимума Посчитать среднее арифметическое чисел находящихся между максимум и минимумом включая их. #include <string.h>... подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2010, 06:27     delete или new (typeid(void*))(void*)
Если тебе нужна скорость, то делай с прямыми данными в теле. А универсальность на такой класс навешивается с помощью шаблонов: делаешь шаблон класса, в нём объявляешь параметр-базовый типа списка, тело объявляешь базового типа, а потом под каждый востребованный тип создаёшь отдельную версию класса списка. А с телом-указателем получишь искусственные тормоза даже в том случае, если этот указатель типизированный. Для нетипизированного же они ещё увеличиваются. Типизированный создаёт дополнительные тормоза только на косвенной адресации: лишние операции загрузки адреса и доступа по нему. А нетипизированный при каждом использовании требует указателей на функции сравнения, сложения, вычитания, умножения, деления, копирования, выделения и освобождения памяти, а загрузка и вызов этих адресов даёт самые капитальные тормоза из всех, что вообще можно навешать на элемент данных. Если же тебе нужна универсальность в пределах каждого списка (один элемент содержит double, другой char) то сделай абстрактный класс элемента списка вообще без тела, а от него уже наследуй элементы с каждым конкретным типом тела. Причём, все указатели на соседа должны быть объявлены как указатели на базовый класс данной иерархии (на элемент без тела).

Добавлено через 3 минуты
Цитата Сообщение от MadOuse Посмотреть сообщение
C++
1
(*el).body = new typeid(NewType);
Если указатель на воид, то
C++
1
 (*el).body = new void*;
.

Добавлено через 2 минуты
C++
1
typeid
можно использовать только с типизированным указателями на класс - член иерархии классов.

Добавлено через 3 минуты
Но самые большие тормоза всё равно идут от самой структуры списка: для каждого доступа к элементу надо перебрать все элементы между началом списка и требуемым элментом, каждый раз загружая адрес соседа, осуществляя доступ по этому адресу, да ещё и в цикле.

Добавлено через 13 минут
Лучше всего сделать динамический массив со счётчиком элементов и внутренней реализацией на основе непрерывного блока указателей на абстрактный класс без данных. При фактическом размещении данных в элементе массива, этому элементу присваивается значение указателя на потомка этого базового абстрактного класса.

Добавлено через 5 минут
Остаются те же тормоза типизированных указателей, но всего двух (один вычисляемый на основе указателя на начало блока) вместо длинной цепочки согласно структуре списка, искусственно удлиняемой ещё на один указатель в теле элемента.

Добавлено через 3 минуты
В итоге это будет работать быстрее, чем доступ к шестому элементу списка с телом-типизированным указателем или к седьмому элементу списка с прямыми данными в теле. А если в теле элемента списка валяется void*, то уже на первом элементе тормозов будет больше.

Добавлено через 4 минуты
В массиве же можно, не увеличивая времени доступа, хранить миллиарды элементов (лишь бы хватило памяти), что даже при прямых данных в теле элемента списка даёт секунды (если не часы, сутки или даже годы) на доступ к среднему элементу.

Добавлено через 5 минут
Свой вариант тоже доделай. Потом запихай в список и в массив по миллиону элементов и погоняй тест в миллион операций рандомного доступа туда и туда с засеканием общего времени.
 
Текущее время: 01:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru