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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Интрузивный и не интрузивный список - C++

03.04.2013, 22:05. Просмотров 3311. Ответов 44
Метки нет (Все метки)

Здорова господа!
Что такое обычный список это понятно есть узел в котором находится указатель на соседний элемент и переменная которая содержит значение узла.
А от интрузивный список хз. Там я от посмотрел в узле содержится токо два указателя на элементы, а где же хранятся данные? От примерчик из википедии:

C++
1
2
3
4
5
6
7
8
9
10
struct list_link 
{
    list_link *prev, *next;
};
 
struct element
{
    int x, y;
    list_link link;
};
Чото мне кажется они наверно ошиблись нужно list_link* наверно заменить на element*
Отак:
C++
1
2
3
{
    element *prev, *next;
};
Тада хоть как то можно его построить? хз?
Вообще не пойму как его строить если в узле токо указатели без данных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 22:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интрузивный и не интрузивный список (C++):

Создать список L3 из элементов, входящих и в список L1 и в список L2 - C++
создать список л3 из элементов входящих и в список л1 и в список л2

Имеется список женихов и список невест. Объединить эти списки в список пар с учетом требований партнерам - Delphi
Имеется список женихов и список невест. Каждая запись списка содержит пол, имя, возраст, рост, вес, а также требования к партнеру:...

программа которая берет список и создает список другой из этого же списка + тот же список без последнего элемента - Prolog
надо написать программу которая берет список и создает список другой из этого же списка + тот же список без последнего элемента к...

Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список L2 - Pascal
Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список...

Создать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2 - C (СИ)
Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в...

Составить базу данных об учащихся. Составить программу позволяющую выводить полный список учащихся, список выбравших предмет, список лучших учеников - Pascal
Составить базу данных об учащихся, предусмотрев поля: Ф.И.О., предметы по выбору, экзаменационные оценки по каждому из них. Составить...

44
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.04.2013, 16:40  [ТС] #16
Цитата Сообщение от ForEveR Посмотреть сообщение
ninja2, Настоятельно рекомендую все же почитать http://www.boost.org/doc/libs/1_52_0..._vs_nontrusive
Как небудь английский выучу и почитаю
Да я уже примерно понял эту концепцию. Просто тяжело понять сразу. Суть уловить тяжело.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.04.2013, 16:41 #17
Цитата Сообщение от Venzo Посмотреть сообщение
struct Elem
{
* * Data *next, *prev;
* * int x, y;
};
А это вообще полный глюк, так как тип Data не описан.
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.04.2013, 16:43  [ТС] #18
taras atavin, нет мы с Venzo все правильно подметили там и правду ошибка на ошибке. Не известно кто там ту статью написал. Делаем выводы википедии лучше не доверять сильно.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.04.2013, 16:48 #19
Интрузивный - это когда в типе данного предусмотрено поле со всеми указателями на соседей, не интрузивный - это когда в типе элемента контейнера предусмотрено поле для данного, обычный - это когда все поля перемешаны в одном типе.

Добавлено через 2 минуты
Цитата Сообщение от ninja2 Посмотреть сообщение
taras atavin, нет мы с Venzo все правильно подметили там и правду ошибка на ошибке. Не известно кто там ту статью написал. Делаем выводы википедии лучше не доверять сильно.
Ну попробуйте со своими "исправлениями" скомиплить прогу, запустить её, заполнить и вывести список. У одного ровно два элемента, у другого не скомпилится, а как раз в вике правильно.
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.04.2013, 16:52  [ТС] #20
чото мне кажется обычный это тоже самое что и не интрузивный одно и тоже.

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну попробуйте со своими "исправлениями" скомиплить прогу, запустить её, заполнить и вывести список. У одного ровно два элемента, у другого не скомпилится, а как раз в вике правильно.
Нет в вики там бред полный. Человек видимо далекий от понимания интрузивного и не интрузивного списка писал.

Добавлено через 30 секунд
в Вики нада исправить подредактировать.

Добавлено через 17 секунд
яб на правильно исправил да лень регистрироваться.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.04.2013, 16:53 #21
ninja2, Какого фига это одно и тоже? В обычном списке (в частности std::list происходит аллокация для внутреннего хранения элементов, создается КОПИЯ элемента и помещается в список). В интрузив списке - копий не создается.
1
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.04.2013, 16:55 #22

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
А это вообще полный глюк, так как тип Data не описан.
на пару постов ниже спуститесь, я писал что ошибся


Объясните нам, пожалуйста, как в коде из вики
C++
1
2
3
4
5
6
7
8
9
10
struct list_link 
{
    list_link *prev, *next;
};
 
struct element
{
    int x, y;
    list_link link;
};
обратиться к след. элементу?
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.04.2013, 16:57  [ТС] #23
Цитата Сообщение от ForEveR Посмотреть сообщение
ninja2, Какого фига это одно и тоже? В обычном списке (в частности std::list происходит аллокация для внутреннего хранения элементов, создается КОПИЯ элемента и помещается в список). В интрузив списке - копий не создается.
Ты просто не понял я с тобой согласен. Это я на пост ответил, что всего два существует определения списка либо интрузивный либо не интрузивный, а если список не интрузивный, то это обычный.
я на это ответил.
Интрузивный - это когда в типе данного предусмотрено поле со всеми указателями на соседей, не интрузивный - это когда в типе элемента контейнера предусмотрено поле для данного, обычный - это когда все поля перемешаны в одном типе.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.04.2013, 16:57 #24
Вы сначала скомпильте и погоняйте.
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
04.04.2013, 16:58 #25
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ninja2 Посмотреть сообщение
Я так понимаю интрузивный это встроеный список, а не интрузивный это кода просто передается елемент, а затем место выделяется под список.
Ну что-то вроде.
Цитата Сообщение от ninja2 Посмотреть сообщение
Если это так, то разница какая в них?
Еще раз:

Интрузивное хранилище ничего не создает и не хранит. Оно лишь составляет контейнер из уже готовых объектов. Следит за их временем жизни так же кто-то другой. Производительность и оптимальность используемой памяти у интрузивных контейнерво выше. Итерирование среди элементов проще и не требует памяти для дополнительных инструментов типа итератора.

Неинтрузивное хранилище создает копию сохраняемого объекта, выделяет доп. память на каждый выделенный объект, следит за временем жизни объектов самостоятельно. Производительность и оптимальность используемой памяти у неинтрузивных контейнеров ниже.

Основное удобство использования интрузивных хранилищ -- нет необходимости копирования объекта и поддержки конструктора копирования и оператора присваивания.
Основное неудобство использования интрузивных хранилищ -- необходимо отдельно следить за временем жизни объекта.

На таких маленьких типах данных разницы не прочувствовать. Создайте хранимый объект, который будет содержать динамически выделяемую память в большом количестве -- несколько мегабайт. И поворочайте с сотню таких объектов в интрузивном и неинтрузивном контейнере.
3
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.04.2013, 17:01  [ТС] #26
В вики там бред написан. Никто те не объяснить. Потому что по тому что в вики написано ты не обычный список не построишь ни интрузивный.

Добавлено через 1 минуту
lemegeton, Да от как раз ваш самый первый пост помог разобраться, токо не сразу. А чуток помучившись.
Спасибо!
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.04.2013, 17:03 #27
Итрузивный:
C++
1
2
3
4
5
6
7
8
9
10
11
struct TLink
{
 TList *next;
 TList *prev;
};
struct TItem
{
 int x;
 int y;
 TLink link;
}
. Связь вложена в данные. Не интрузивный:
C++
1
2
3
4
5
6
7
8
9
10
11
struct TData
{
 int x;
 int y;
};
struct TItme
{
 TItem *Next;
 TItem *Prev;
 TData Data;
};
. Данные вложены в элемент контейнера.
Обычный:
C++
1
2
3
4
5
6
7
struct TItme
{
 TItem *Next;
 TItem *Prev;
 int x;
 int y;
};
. Всё в навал.
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.04.2013, 17:08 #28
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
struct TLink
{
*TList *next;
*TList *prev;
};
struct TItem
{
*int x;
*int y;
*TLink link;
}
там вместо TList должно быть TItem или TLink? Если TLink, можете показать пример, как из одного элемента обратиться к данным соседнего?
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.04.2013, 17:10  [ТС] #29
Используя всего навсего эту структуру:
C++
1
2
3
4
5
6
7
struct TItme
{
 TItem *Next;
 TItem *Prev;
 int x;
 int y;
};
Строится как обычный список так и интрузивный.

Добавлено через 1 минуту
Ладно разбирайтесь но в коде из вики ничо не будет работать ни один список.
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
04.04.2013, 17:11 #30
не знаю насколько я прав, но если бы на просторах была хотя бы одна достойная демонстрация интрузивного и не интрузивного списка, кол-во вопросов было бы раза в 2 меньше.
0
04.04.2013, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2013, 17:11
Привет! Вот еще темы с ответами:

3 класса: список, стек(как список), очередь(как список) - C++
препод дал задание: написать 3 класса (список, стек, очередь), методы: вывод, добавление, удаление. Использовать при обращении указатель...

Сформировать список из 10 книг, используя динамическую структуру данных односвязный список - C++
друзья спасайте Сформировать список из 10 книг, используя динамическую структуру данных односвязный список С++

Список: Сформировать третий список, содержащий числа Фибоначи исходных списков - Turbo Pascal
Дано два однонаправленных списка целых чисел.Сформировать третий список, содержащий числа Фибоначи исходных списков. Как это записывается?

Вывести список ровесников и список сотрудников со стажем, большим заданного числа - C (СИ)
Дан список N сотрудников с указанием фамилии, даты рождения,стажа работы и зарплаты.Вывести: список ровесников и список сотрудников со...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru