Skip to content

Latest commit

 

History

History
79 lines (74 loc) · 3.96 KB

Lecture 01.md

File metadata and controls

79 lines (74 loc) · 3.96 KB


Intrusive Container

Хотим оптимально хранить движущихся юнитов

set<unit*> units;
set<unit*> moving_units;

Можно заменить moving_units на двухсвязанный список с next и prev (intrusive_list)

Units можно связать так же

template<typename Tag = defaltH_tag>
struct node {
	node *next, *prev;
}
unit* toUnit(node* p) }
	return (unit*) ((char*)p - offsetof(unit, link));
} 

В с++ унаследоваться и просто статик каст от базового к производному

struct unit : node<struct all_units_tag> {
}

intrusive_list<unit, struct all_units_tag>;

intrusive not-intrusive
memory size (не всегда) less? (+) greater?
number of alloc smaller (+) bigger
скорость итераций обычно быстрее обычно медленнее
require object modification YES (-) No
containers non-copyable (-) copyable
container manages lifetime of objects NO (critical) (-) Yes
exception safety guarantees better (mostly nothrow) (+) worse
value -> iterator allow (+) disallow