powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
25 сообщений из 422, страница 9 из 17
Различные структуры данных. Реализация
    #38883445
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, BS на 192 странице (7.4) говорит о том что происходит некий процесс поиска подходящей функции. Да и это логично
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883446
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТам есть практически один единственный тип данных IupHandle*. Конкретные объекты создаются через IupFrame(), IupButton(), IupMenu(), etc. А дальше опять одна единственная функция IupSetAttribute(IupHandle*, ....);так и вижу, как я пишу функции вида: IupEmptyFrame(), IupFrameWithHeader(), IupFrameWithDoubleBorder(), IupFrameWithHeaderAndDoubleBorder()...
потому что это понятней всё же, чем
Код: plaintext
1.
2.
3.
4.
5.
IupHandle *frm = IupFrame();
IupSetAttribute( frm, "Header", NULL );
IupSetAttribute( frm, "Border", "Double" );
...
IupSetAttribute( frm, "BorderColor", "Red" );

разбросанные по всему коду ровным слоем. Бррр! ))))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883447
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВ данном случае общий предок это "некая переменная". Ну вот и сделай себе абстрактную переменную. Это будет конечно чуть сложнее чем с POD типами, но не намного.
А можете привести код вызывающий такую функцию с двумя разными типами, чтобы мы увидели насколько это "не намного сложнее", когда вместо передачи числа или строки создается, а после вызова удаляется объект?

Также не совсем понятно как перегрузка разным количеством аргументов реализуется с помощь. наследования.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883448
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owl,
>>Неверно. Опыт тебе должен говорить: Использовать объектную парадигму легче на языках поддерживающих объектный синтаксис.
ну, это софистика уже пошла.А вот тут я бы тебе предложил заглянуть в словарь, с целью узнать значение слова "софизм".
А вот то что ты допустил паралогизм играясь с тавтологией это без сомнения.

egorych>>А так, объектную парадигму можно применить практически к любому языку.
эмулировать можно, где то лучше, где то хуже. Можно даже назвать это "я пишу в объектном стиле", а я это называю: "я умею строить вон какие крутые костыли" И? Одно другому не мешает.
Вопрос же был: возможно ли это? Ответ: да возможно.
И эти костыли не такие уж крутые. Ты бы посмотрел как объектность достигается в Rexx, особенно как это внутри организовано... Вот там это действительно восхищение вызывает!

egorych>>Это надо понимать что ты не видел системных программ написанных на Quick BASIC
я и игры на бэйсике видел, не об этом ведь речьПовторюсь:
Вопрос же был: возможно ли это? Ответ: да возможно.
Так что да, Turbo Basic это тоже язык системного программирования. Если из ЯП можно добраться до функций ОС - это язык годный для системного программирования.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883449
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСтранно, BS на 192 странице (7.4) говорит о том что происходит некий процесс поиска подходящей функции. Да и это логично
Да при компиляции происходит поиск имен.
Это занимает микросекунды. Т.е. по сути не влияет на скорость компиляции.
При связывании скорость поиска не зависит от перегрузки, т.к. каждая перегрузка дает отдельное имя.
А при выполнении имен вообще нет, есть только адреса, которые вообще не надо искать.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883450
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryСтранно, BS на 192 странице (7.4) говорит о том что происходит некий процесс поиска подходящей функции. Да и это логично
Да при компиляции происходит поиск имен.
Это занимает микросекунды. Т.е. по сути не влияет на скорость компиляции.
При связывании скорость поиска не зависит от перегрузки, т.к. каждая перегрузка дает отдельное имя.
А при выполнении имен вообще нет, есть только адреса, которые вообще не надо искать.

а, в С++ статическая типизация как и в Си, верно ?) Т.е. это влияет только на скорость компиляции
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883452
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlВ данном случае общий предок это "некая переменная". Ну вот и сделай себе абстрактную переменную. Это будет конечно чуть сложнее чем с POD типами, но не намного.
А можете привести код вызывающий такую функцию с двумя разными типами, чтобы мы увидели насколько это "не намного сложнее", когда вместо передачи числа или строки создается, а после вызова удаляется объект?Мне уже лень писать очевидный код.
Повторяю ссылку: http://iup.sourceforge.net/
Библиотека построенная именно по принципу наследования структур. Там есть и примеры, и исходники и все что угодно. И она уже вылизанная и без синтаксических ошибок. А то знаю я вас, опечатаюсь где-нибудь, а в ответ сразу прилетит: "Этот метод не работает!"

Anatoly MoskovskyТакже не совсем понятно как перегрузка разным количеством аргументов реализуется с помощь. наследования.Через эллипсис конечно.
Да, ошибки компилятор не отловит, но в рантайме можно все очень просто сделать.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883453
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite OwlТам есть практически один единственный тип данных IupHandle*. Конкретные объекты создаются через IupFrame(), IupButton(), IupMenu(), etc. А дальше опять одна единственная функция IupSetAttribute(IupHandle*, ....);так и вижу, как я пишу функции вида: IupEmptyFrame(), IupFrameWithHeader(), IupFrameWithDoubleBorder(), IupFrameWithHeaderAndDoubleBorder()...
потому что это понятней всё же, чем
Код: plaintext
1.
2.
3.
4.
5.
IupHandle *frm = IupFrame();
IupSetAttribute( frm, "Header", NULL );
IupSetAttribute( frm, "Border", "Double" );
...
IupSetAttribute( frm, "BorderColor", "Red" );

разбросанные по всему коду ровным слоем. Бррр! ))))То есть тебе больше по душе метод примененный в GLIB/GTK+? Ну Ок. Называется от чего ушли, к тому пришли :)
Но эта парадигма тоже вполне рабочая и прекрасно живущая.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883454
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧерез эллипсис конечно.
Да, ошибки компилятор не отловит, но в рантайме можно все очень просто сделать.
И передавать число аргументов? Без этого ... не работает.

Я правильно понимаю? Чтобы на С писать программы с уровнем абстракции выше ассемблера, надо реализовать в проекте свой вариант эмуляции динамической типизации.
Так а зачем нужен С тогда? Пишите сразу на Перле или Питоне каком-нибудь - там все это готовое уже, и скорость будет такая же, если не лучше.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883458
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощение, у меня тут возник вопрос по теме топика. Написал программу (взял у K&R) собирающую все слова в файле с подсчётом появлений. Использую бинарное дерево

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
struct TreeNode
{
	char* w;
	int count;
	struct TreeNode* left;
	struct TreeNode* right;
};



И такие функции:

Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
struct TreeNode* createTreeNode()
{
	struct TreeNode* tn = (struct TreeNode*)malloc(sizeof(struct TreeNode));
	tn->w = NULL;
	tn->count = 0;
	tn->left = tn->right = NULL;
	return tn;
}

struct TreeNode* createTreeNode(const char* w)
{
	struct TreeNode* tn = (struct TreeNode*)malloc(sizeof(struct TreeNode));
	tn->w = NULL;
	tn->w = (char*)malloc(sizeof(char)*(strlen(w)+1));
	strcpy(tn->w, w);
	tn->count = 1;
	tn->left = tn->right = NULL;
	return tn;
}

struct TreeNode* retree(struct TreeNode* root, const char* w)
{
	if (root == NULL){
		struct TreeNode* new_root = createTreeNode(w);
	}
	else{
		int cond = strcmp(root->w, w);
		if (cond > 0){
			root->left = retree(root->left, w);
		}
		else if (cond > 0){
			root->right = retree(root->right, w);
		}
		else{
			root->count += 1;
		}
	}
	return root;
}

void printTreeNodes(struct TreeNode* root)
{
	if (root != NULL)
	{
		printTreeNodes(root->left);
		printf("%4i %s\n", root->count, root->w);
		printTreeNodes(root->right);
	}
}



Такой код обрабатывает файл

Код: plaintext
1.
2.
3.
4.
5.
6.
	char* id = (char*)malloc(sizeof(char)*MAX_LENGTH_INTERNAL_IDENTIFIER);
	while ((t = get_identifier(id, in)) != EOF)
	{
		//printf("%s\n", id);
		root = retree(root, id);
	}



Функций retree мне не нравится, думаю что проблема в ней. Но она приведена у K&R, потому возможно с ней всё в порядке. Подскажите пожалуйста, в чём я ошибаюсь ?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883460
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё у меня вопрос по соседнему топику, но там я не могу отправить сообщение. Не знаю почему.

Объекты объявленные в теле цикла являются автоматическими, это так. И потому они действительно должны автоматически уничтожиться, не вызывая утечек.

Но как это должно наверняка происходить в цикле ? 1. Либо, как говорит Анатолий (возможно это соответствует стандарту), на каждой итерации цикла будет создаваться новый объект, путь даже по тому-же адресу 2. Либо объект будет создан один раз, и уничтожится после завершения всех итераций цикла (о чём говорил Дмитрий, и что логичнее).
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883473
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
struct TreeNode* retree(struct TreeNode* root, const char* w)
{
	if (root == NULL){
		struct TreeNode* new_root = createTreeNode(w);
                return new_root;
	}
	else{
		int cond = strcmp(root->w, w);
		if (cond > 0){
			root->left = retree(root->left, w);
		}
		else if (cond > 0){
			root->right = retree(root->right, w);
		}
		else{
			root->count += 1;
		}
               return root;
	}
	
}
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883480
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Заработало, не заметил. Спасибо )
Только так исправил

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
struct TreeNode* retree(struct TreeNode* root, const char* w)
{
	if (root == NULL){
		root = createTreeNode(w);
	}
	else{
		int cond = strcmp(root->w, w);
		if (cond > 0){
			root->left = retree(root->left, w);
		}
		else if (cond < 0){
			root->right = retree(root->right, w);
		}
		else{
			root->count += 1;
		}
	}
	return root;
}
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883549
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

>>Вопрос же был: возможно ли это? Ответ: да возможно.
так с этим то как раз никто не спорит. С помощью волшебных костылей можно всё. Спор ведётся о том, нужно ли :) Ведь есть инструмент, который позволяет обсуждаемое из-коробки, так зачем нужны все эти извращения? Вот чего я понять до сих пор не могу ))

>>То есть тебе больше по душе метод примененный в GLIB/GTK+?
мне по душе метод, применённый в С++. Хочешь писать в объектном стиле - бери язык с поддержкой ООП :)
>>Называется от чего ушли, к тому пришли :)
это называется, что так и не ушли, а просто переместили проблему уровнем выше, ничего, по сути, не решив :)
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883900
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я читал... думал... снова читал.

Слушайте... а почему вы сравниваете два абсолютно разных языка? Вы бы ещё Дельфи с Питоном сравнивали.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883941
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalСлушайте... а почему вы сравниваете два абсолютно разных языка?
Какие же они разные, если все вот эти С-шные костыли можно просто взять и не меняя ни строчки кода использовать в С++ коде (ну предположим что найдутся извращенцы, которые имея С++ буду писать на нем в стиле С) ? :)

jmp_originalВы бы ещё Дельфи с Питоном сравнивали.
А тут - да. Несравнимо. Дельфи-то вообще не язык )))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883956
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

1) Можно. Даже, наверное, находятся. Только это всё равно будет PureC, а не.

2) Хорошо, Паскаль.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883966
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_original2) Хорошо, Паскаль.
Я другое имел в виду когда говорил "не язык"
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883981
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЯ другое имел в виду когда говорил "не язык" как там было о снобизме?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38884064
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychкак там было о снобизме?
Одно дело, когда отвечаешь на чистый флейм, другое дело когда на полном серьезе даются советы ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38884216
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyjmp_originalСлушайте... а почему вы сравниваете два абсолютно разных языка?
Какие же они разные, если все вот эти С-шные костыли можно просто взять и не меняя ни строчки кода использовать в С++ коде (ну предположим что найдутся извращенцы, которые имея С++ буду писать на нем в стиле С) ? :)
Возможно ноги растут от интеграции другими средами или рантаймами или технологиями.
Обычно С-исходник проще вызывается из через JNI, Remoting. Или прочие техники
маршалинга-сериализации.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38884273
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОбычно С-исходник проще вызывается из через JNI, Remoting. Или прочие техники
маршалинга-сериализации.
Проще чем что?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38884345
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толик не придирайся. Ты прекрасно понял чем что.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38884347
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЯ правильно понимаю? Чтобы на С писать программы с уровнем абстракции выше ассемблера, надо реализовать в проекте свой вариант эмуляции динамической типизации.Не передергивай.
Можно писать ОО на Си даже со статической типизацией, но вот ее уже надо будет делать вручную. Она конечно будет потом оптимизирована вплоть до отсутствия кода, но в исходнике ее надо будет самому писать. Пример: GTK+ с его функциями вида GTK_WIDGET().
С динамической типизацией проще.

egorych>>Вопрос же был: возможно ли это? Ответ: да возможно.
так с этим то как раз никто не спорит. С помощью волшебных костылей можно всё. Спор ведётся о том, нужно ли :) Ведь есть инструмент, который позволяет обсуждаемое из-коробки, так зачем нужны все эти извращения? Вот чего я понять до сих пор не могу ))Нет. О том "нужно оно или нет" вопрос в этом топике, вплоть до поста на который я сейчас отвечаю, еще не поднимался.

Anatoly MoskovskymaytonОбычно С-исходник проще вызывается из через JNI, Remoting. Или прочие техники
маршалинга-сериализации.
Проще чем что?
Проще чем всё.
Межязыковое взаимодействие с Си намного проще чем с любым другим языком. За исключением ассемблера конечно.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38884355
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТолик не придирайся. Ты прекрасно понял чем что.
White OwlПроще чем всё.
Межязыковое взаимодействие с Си намного проще чем с любым другим языком. За исключением ассемблера конечно.
Ну видите. Далеко не всем понятно, не только проще чем что, но и вообще что проще.
Мне например совершенно не понятно проще чем что JNI, которое является одной из самых технически сложных для применения технологий межъязыкового взаимодействия.
И уж точно не проще прямого С-шного синтаксиса при вызове внешних библиотек.
...
Рейтинг: 0 / 0
25 сообщений из 422, страница 9 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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