Boost.Intrusive
- 伝統的なリンクリストの構造体をContainer風に操作できる
伝統的なリンクリストはノードポインタを要素に埋め込むことでメモリアクセスの負担を軽くする- CPUにとってアクセスが容易なメモリの塊(std::vectorなど)を利用してリンク構造を提供できる
- Boost.PtrContainerと違ってownershipに関与しない
[]#include[][] <iostream>[]
[]#include[][] <vector>[]
[]#include[][] <boost/intrusive/ilist.hpp>[]
[]#include[][] <boost/range.hpp>[][]typedef[] []struct[] []ENEMY[] {
[]struct[] []ENEMY[] *[]prev[];
[]struct[] []ENEMY[] *[]next[];
[]int[] []x[], []y[];
} []ENEMY[];
[]typedef[] []boost[]::[]intrusive[]::[]ilist[]<
[]boost[]::[]intrusive[]::[]member[]<[]ENEMY[], &[]ENEMY[]::[]prev[], &[]ENEMY[]::[]next[]>
> []ENEMY_list_t[];[]int[] []main[]([]int[] []argc[], []char[] *[]argv[][])
{
[]typedef[] []std[]::[]vector[]<[]ENEMY[]> []enemy_container_t[];
[]enemy_container_t[] []enemies[](100);
{
[]ENEMY_list_t[]::[]init_node[]([]enemies[][0]); []enemies[][0].[]x[] = 5; []enemies[][0].[]y[] = 10;
[]ENEMY_list_t[]::[]init_node[]([]enemies[][1]); []enemies[][1].[]x[] = 6; []enemies[][1].[]y[] = 12;
[]ENEMY_list_t[]::[]init_node[]([]enemies[][2]); []enemies[][2].[]x[] = 7; []enemies[][2].[]y[] = 14;
[]// ...[]
}[]ENEMY_list_t[] []stage1_enemies[];
[]for[] ([]boost[]::[]range_size[]<[]enemy_container_t[]>::[]type[] []i[] = 0; []i[] < 3; ++[]i[])
[]stage1_enemies[].[]push_back[]([]enemies[][[]i[]]);[]for[] ([]boost[]::[]range_const_iterator[]<[]ENEMY_list_t[]>::[]type[]
[]it[] = []boost[]::[]const_begin[]([]stage1_enemies[]), []last[] = []boost[]::[]const_end[]([]stage1_enemies[]);
[]it[] != []last[]; ++[]it[])
{
[]std[]::[]cout[] << []it[]->[]x[] << []","[] << []it[]->[]y[] << []std[]::[]endl[];
}[]std[]::[]cin[].[]get[]();
[]return[] 0;
}