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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить количество одинаковых букв по парам слов в предложении http://www.cyberforum.ru/cpp-beginners/thread191370.html
Помогите написать программу которая считывает текст из файла и определяет количество одинаковых букв ПО ПАРАМ слов в предложении. Добавлено через 20 часов 11 минут Сделайте кто-нибудь...
C++ отсортировать текст Помогите плиз... Отсортировать текст по длине слов в порядке возрастания. В тексте несколько строк. Исходный текст должен содержаться в одном файле, результат — во втором файле. решение нужно в си. http://www.cyberforum.ru/cpp-beginners/thread191343.html
Поиск заданной буквы в строке. Определения количества слов C++
В заданной строке определить количество слов, в которых заданная буква встречается больше одного раза. Язык С. Помогите пожалуйста!
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__? http://www.cyberforum.ru/cpp-beginners/thread191324.html
При компиляции можно вызвать макропеременную __DATE__ которая хранит текущую дату. Мне надо из этой даты по отдельности в 3 переменные вытащить год, месяц, день. Кто-нибудь не подскажет в какой...
C++ Найти самое короткое слово первой строки, которого нет во второй строке Люди! Помогите,пожалуйста.. надо написать программу на С++ выводящую на экран самое короткое слово первой строки,которого нет во втором предложении ( соответственно даны 2 строки, вводятся с... подробнее

Показать сообщение отдельно
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2010, 06:27
Если тебе нужна скорость, то делай с прямыми данными в теле. А универсальность на такой класс навешивается с помощью шаблонов: делаешь шаблон класса, в нём объявляешь параметр-базовый типа списка, тело объявляешь базового типа, а потом под каждый востребованный тип создаёшь отдельную версию класса списка. А с телом-указателем получишь искусственные тормоза даже в том случае, если этот указатель типизированный. Для нетипизированного же они ещё увеличиваются. Типизированный создаёт дополнительные тормоза только на косвенной адресации: лишние операции загрузки адреса и доступа по нему. А нетипизированный при каждом использовании требует указателей на функции сравнения, сложения, вычитания, умножения, деления, копирования, выделения и освобождения памяти, а загрузка и вызов этих адресов даёт самые капитальные тормоза из всех, что вообще можно навешать на элемент данных. Если же тебе нужна универсальность в пределах каждого списка (один элемент содержит 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 минут
Свой вариант тоже доделай. Потом запихай в список и в массив по миллиону элементов и погоняй тест в миллион операций рандомного доступа туда и туда с засеканием общего времени.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru