powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
25 сообщений из 422, страница 15 из 17
Различные структуры данных. Реализация
    #39099327
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercuryПочему так ?компилятор должен ведь знать, чего именно ему генерить, не?
Егорыч это ответ в стиле кэпа.
Думаю что имеет смысл нам всем вспомнить почему в С++ исходный код разделён
на два подтипа текстов кода.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39099401
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДумаю что имеет смысл нам всем вспомнить почему в С++ исходный код разделён
на два подтипа текстов кода.мне кажется, надо вспомнить правила инстанцирования шаблона, и, собственно, вопрос пропадёт сам собой.
Была, правда, попытка ввести ключевое слово export, или прагма( export ), не помню, но не взлетело.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100154
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychmaytonДумаю что имеет смысл нам всем вспомнить почему в С++ исходный код разделён
на два подтипа текстов кода.мне кажется, надо вспомнить правила инстанцирования шаблона, и, собственно, вопрос пропадёт сам собой.
Была, правда, попытка ввести ключевое слово export, или прагма( export ), не помню, но не взлетело.

Почему это происходит так как происходит, примерно понятно. Когда происходит сборка программы линковщик не может найти конкретную реализацию методов для конкретного типа объекта созданного класса. Явное инстанцирование не самый хороший вариант (хотя его можно использовать, я так думаю (кстати, интересно как в STL сделано)). Непонятно почему до сих пор эта проблема не решена, шаблоны, как мне пока кажется, слишком хороший инструмент(особенно для С++, с учётом типизации данного языка), чтобы иметь какие-то особенности по реализации. Работа с ними должна быть проще, без каких-либо особенностей
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100158
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, линковщик видит что необходимо провести инстанцирование шаблона с параметрами int и elseType например, почему бы не провести повторную компиляцию некоторых модулей в которой провести явное инстанцирование данных шаблонных классов ?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100165
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНепонятно почему до сих пор эта проблема не решена
Потому что никакой проблемы нет.
SashaMercuryНапример, линковщик видит что необходимо провести инстанцирование шаблона с параметрами int и elseType
Линковщик не знает ни про шаблоны, ни про классы. Он видит только переменные и функции.
Инстанцированием занимается компилятор. Если он этого не сделал, то линковщик не найдет соответствующую функцию.

На практике никакой проблемы нет, т.к. шаблоны размещаются в заголовках и включаются в каждую единицу трансляции, где они используются.
А на линковщик возлагается устранение дубликатов инстанцированных шаблонов.
И это работает.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100217
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНапример, линковщик видит что необходимо провести инстанцирование шаблона с параметрами int и elseType например, почему бы не провести повторную компиляцию некоторых модулей в которой провести явное инстанцирование данных шаблонных классов ? Повторную компиляцию? А где он исходники cpp возьмет, если, положим, библиотека поставляется с закрытым кодом?

Если так нужно скрыть исходный код или избавиться от многочисленной повторной компиляции сложных шаблонов (которая отнимает массу времени в больших проектах) можно явно указать какие реализации шаблона должны быть инстанцированы в библиотеке - см. явное инстанцирование. Конечно, если в программе понадобится новый экземпляр шаблона, придется менять библиотеку.

Другой подход - использовать шаблон как обертку над обычными не шаблонными функциями.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100234
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий, я лишь говорил о том, что как правило определение класса, и реализация методов класса расположены в разных файлах .h и .cpp Для шаблонных классов несколько иначе. И мне это не очень нравится, это только моё мнение. Я подумаю о том что вы написали, спасибо. У меня только один вопрос: можно ли решить эту 'проблему' на уровне препроцессора/компилятора/линкера ? Чтобы разработчик об этом не задумывался. Например, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы. Принципиально такое возможно ?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100265
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryАнатолий, я лишь говорил о том, что как правило определение класса, и реализация методов класса расположены в разных файлах .h и .cpp Для шаблонных классов несколько иначе. И мне это не очень нравится, это только моё мнение. Я подумаю о том что вы написали, спасибо. У меня только один вопрос: можно ли решить эту 'проблему' на уровне препроцессора/компилятора/линкера ? Чтобы разработчик об этом не задумывался. Например, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы. Принципиально такое возможно ?
только если поменяют формат объектных файлов
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100271
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНапример, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы.а откуда компилятор возьмёт этот код, как думаешь? Компилятор как догадается, что ему надо заглянуть в cpp-файл, и в какой именно?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100281
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercuryНапример, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы.а откуда компилятор возьмёт этот код, как думаешь? Компилятор как догадается, что ему надо заглянуть в cpp-файл, и в какой именно?
По имени файла.

Ладно, пусть вы все правы, я не претендую. Нельзя, значит нельзя. Раз все в Сообществе считают что эта ситуация не даёт каких-то проблем, и вообще, не нужно на ней заострять внимание, то соглашусь. Я вам верю. Спасибо всем за ваше мнение по данному вопросу
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100334
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryАнатолий, я лишь говорил о том, что как правило определение класса, и реализация методов класса расположены в разных файлах .h и .cpp Для шаблонных классов несколько иначе. И мне это не очень нравится, это только моё мнение. Я подумаю о том что вы написали, спасибо. У меня только один вопрос: можно ли решить эту 'проблему' на уровне препроцессора/компилятора/линкера ? Чтобы разработчик об этом не задумывался. Например, на этапе препроцессорной обработки определять какие потребуются инстанцирования и добавлять соответствующий код(для вызова явного инстанцирования) в соответствующие заголовочные файлы. Принципиально такое возможно ?

Это скорее вопрос к IDE, чем к компилятору. Вероятно, в природе есть утилиты которые помогают автоматически создавать код для явного инстанцирования шаблонов. При желании ты можешь сам сделать такую и добавить в процедуру сборки проекта.

В общем случае, когда библиотека шаблонов разрабатывается и компилируется отдельно, разработчик библиотеки должен сам собрать эти данные из других проектов или из требований заказчиков и в как-то передать их в компилятор.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100647
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЧтобы разработчик об этом не задумывался.
А не надо задумываться. Шаблоны - всегда помещать в заголовок.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100804
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саш. Яж говорил что ты скоро возненавидишь С++ лютой ненавистью. Ты - математик. И твоя стезя - другое.

Just IMHO.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39100998
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСаш. Яж говорил что ты скоро возненавидишь С++ лютой ненавистью. Ты - математик. И твоя стезя - другое.

Just IMHO.

Математиками можно смело назвать Вейерштрасса, Коши, Гаусса, Колмогорова, Маркова, Красносельского, Зарубина и других, я только изучаю математику и искренне люблю её.

Марк, мне интересны эти языки, навряд-ли я когда-то буду зарабатывать этим на жизнь, но мне это нравится. Из того что порой мне что-то кажется непонятным и я с чем-то не согласен, не следует что мне начинает не нравиться этот язык, из этого, как правило, следует что я мало знаю для того, чтобы понять почему именно так правильно и должно быть.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39101026
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дай бох.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39101295
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСаш. Яж говорил что ты скоро возненавидишь С++ лютой ненавистью.
Рано еще про ненависть говорить, это он еще за джаву не взялся
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290119
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
У меня возник вопрос в контексте С++. Существует ли такой контейнер или другая стандартная реализация следующей структуры(контейнера):
1. Содержатся только уникальные элементы типа float, проверка до третьего знака. Соответственно вставка не происходит в том случае, если элемент уже содержится в множестве.
2. Элементы отсортированы по возрастанию.
3. Никаких ограничений на асимптотику CRUD операций.

Скорее всего имею бинарное дерево, реализация классическая. Но в контексте изучения С++, хотелось бы использовать существующие возможности языка. Скорее всего мне необходимо изучить работу с контейнером map, верно ли это? Или можно подойти к данной задаче с другой стороны?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290123
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут set<> достаточно. Только еще свой компаратор придется написать, для сравнения 3-х знаков.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290132
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если "проверка до третьего знака" означает фиксированные три знака после запятой, то можно биткарту (vector<bool>) использовать, т.к. точность float всего 7 десятичных знаков, то потребуется 1,25 Мб под биткарту. Проверка наличия будет быстрее.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290138
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если посмотреть "под углом" fixed-point операций то постановка упрощается. IMHO.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290152
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий, спасибо! Посмотрю сегодня контейнер set.

Dima TЕсли "проверка до третьего знака" означает фиксированные три знака после запятой, то можно биткарту (vector<bool>) использовать, т.к. точность float всего 7 десятичных знаков, то потребуется 1,25 Мб под биткарту. Проверка наличия будет быстрее.

Я почему думал о сравнении . Этого в данном случае будет недостаточно?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290222
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДмитрий, спасибо! Посмотрю сегодня контейнер set.

Dima TЕсли "проверка до третьего знака" означает фиксированные три знака после запятой, то можно биткарту (vector<bool>) использовать, т.к. точность float всего 7 десятичных знаков, то потребуется 1,25 Мб под биткарту. Проверка наличия будет быстрее.

Я почему думал о сравнении . Этого в данном случае будет недостаточно?
По твоей изначальной формулировке можно также предположить что интересны первые три знака мантиссы. В данном случае фиксированные три знака после запятой.
Эту формулу надо будет в компаратор, пример под спойлером.
пример std::set
Код: plaintext
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.
#include <set>

struct fixed_compare :
	public
	std::binary_function<float, float, bool>
{
	bool operator() (const float& lhs, const float& rhs) const
	{
		if (abs(lhs - rhs) < 0.0009) {
			return 0; // ==
		} else {
			return lhs < rhs;
		}
	}
};

typedef std::set<float, fixed_compare> fixed_set_t;

int main() {
	fixed_set_t arr;
	arr.insert(1.000);
	arr.insert(1.002);
	arr.insert(1.002);
	arr.insert(1.001);
	arr.insert(1.0011);
	for (fixed_set_t::iterator it = arr.begin(); it != arr.end(); ++it)
		std::cout << ' ' << *it;
	std::cout << '\n';
	return 0;
}

...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290254
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Не работает. Выводит 1.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290260
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglDima T,

Не работает. Выводит 1.
У меня работает MS VC 2015
Код: plaintext
1.
 1 1.001 1.002
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39290261
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ппц ошибка. Помогла замена abs() на fabs().

Причина в каких то округлениях (

Тестил тут http://cpp.sh
...
Рейтинг: 0 / 0
25 сообщений из 422, страница 15 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]