问题标签 [intrusive-containers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
24 浏览

c++ - 提升::侵入性 Q4

以下程序没有按我预期的方式运行。执行后

我认为它values不包含任何“Mike”,长度为 7,或 11 - 4。相反,“Mike”似乎被添加到末尾,std::vector<MyClass> value计数为 10?

编辑:

通过替换修复

经过

编辑2:

更好的是

0 投票
1 回答
88 浏览

c++ - 尝试学习 boost::intrusive Q5

我有以下程序。我在 linux 下使用 gcc-4.9.2 构建它。我的问题是:

1)为什么哈希表似乎第一次排序,但从值中删除项目后失去排序?

2)我如何自己通过键遍历哈希表并说出 std::cout 每个散列到存储桶的项目,例如the #if 0 #endif部分中的代码?

0 投票
1 回答
122 浏览

c++ - 两个 [或更多] 容器具有相同的基础数据,但对数据的看法不同

下面的 MyClass 表示我需要能够以两种方式快速搜索的数据结构。所以说我将 MyClass 存储在和 std::vector 中,以便可以快速删除并连续插入其中的相似名称。但是,我还需要能够基于 anInt 对 MyClass 的内容进行排序。这就是侵入式容器(或 Multimap)对 [很可能] 未排序的 std::vector 的内容进行排序的地方。两个容器对相同的底层项目执行两种截然不同的职责。此外,如果我从 std::vector 中删除了这些项目,它们也会自动从侵入式容器中消失。

这是一个想法

0 投票
1 回答
96 浏览

c++11 - Boost.Intrusive 和 fast_pool_allocator

如果我这样说,我稍后会收到一个奇怪的编译器 (gcc4.9, boost 1_58) 错误:

当我去访问这个 IL 时:

这样做的正确方法是什么?

0 投票
1 回答
248 浏览

c++ - 在 C++ 中合并两个增强侵入集?

我有两个增强侵入集,我需要将它们合并在一起。我有map_old.m_old_attributes增强侵入集,我需要将其合并以m_map_new_attributes增强侵入集

做这个的最好方式是什么?我找不到可以为我进行合并的功能?我最近开始使用 boost 侵入集,但我找不到可以进行合并的预定义方法,或者我错了?

0 投票
1 回答
107 浏览

c++ - 一个类是否需要是标准布局类型才能确定其成员的内存偏移量?

假设我想写一个侵入性列表。我有一个侵入式列表类模板,它采用类型和指向成员的指针以用作节点。它看起来大致是这样的:

您要存储在列表中的每件事都有一个 IntrusiveListNode 。要将 IntrusiveListNode 变回您可以使用的东西,例如 IntegerListNode,您需要调用一个函数,该函数根据节点在类中的偏移量对节点进行一些指针运算,然后将其转换为适当的类型。这似乎有效,但我认为不能保证。

我希望能够在我的类中添加一个 static_assert,以在编译时验证您使用的类型是安全的,但我不确定 static_assert 的条件是什么。我认为这只有在持有 IntrusiveListNode 的类型是标准布局类时才能保证有效,但我不确定,因为标准布局类型的要求似乎比我实际需要的更严格。

特别是,标准布局类型要求所有成员具有相同的访问控制。我需要的是能够确保指针算术能够正常工作。这意味着您不能在多态类型上使用它,因为结构的两个不同版本可能会以不同方式布局,但如果该类型混合了私有和公共数据成员,这应该不是问题,对吧?如果我只要求类型是非多态的,那会安全吗?还是有更好的检查方法?还是我卡在做is_standard_layout检查?

0 投票
2 回答
115 浏览

c++ - 这种类型的模板参数的含义是什么 - `ClassAT::*ELEM`?

我最近在侵入性列表的上下文中遇到了这段代码:

我在 boost侵入式列表库( member_hook<class T, class Hook, Hook T::* PtrToMember>)中看到了类似的代码。

我的问题是关于模板参数Node<T> T::*NODE。我不是 C++ 方面的专家,但我以前从未遇到过这种特殊的语法,也不知道要搜索什么来理解它。

这是什么意思?它的目的是什么,我应该将其解释为 - “ NODE 是指向节点的指针,属于 T ”?这对我来说没有意义,因为不知道 T 提前包含特定成员,据我所知,::它用于解析范围。

同样,如果有人可以澄清*NODE这一行中的用法,例如 : Node<T> *node = &(elem->*NODE);,那将有助于我理解它的用途。

0 投票
4 回答
977 浏览

c++ - 将链表嵌入数据结构有什么好处?

在阅读 FreeBSD 中的内核数据结构时,我偶然发现了MBuf. MBuf包含指向MBuf链中下一个的指针MBuf,实现了一个链表。每个MBuf本身还包含特定于链接列表中该节点的数据。

我更熟悉将容器类型与值类型(考虑std::list,或System.Collections.Generic.LinkedList)分离的设计。我正在努力理解将容器语义嵌入数据类型的价值主张——获得了哪些效率?真的是为了消除节点实例指针存储吗?

0 投票
1 回答
233 浏览

c++ - boost::intrusive::list with the auto-unlink hook:我可以使用列表中的一个值来确定列表是否只有一个元素?

我有一个boost::intrusive::list<Foo, constant_time_size<false>>, whereFoolist_base_hook<auto_unlink>钩子继承。使用列表元素foo,我可以通过调用来获取它的迭代器list::s_iterator_to(foo)。我的问题是如何使用此迭代器遍历列表。特别是,有没有办法判断这个元素是否是列表中唯一的一个?

消息来源建议在其价值特征中list使用 a cicular_list_algorithms,也许我可以使用以下测试?

它看起来很hacky,但它似乎有效。我不确定它是否正确和惯用。有人可以建议吗?

完整清单:

是的,我确实意识到取消引用++itr1并且--itr1是错误的。有什么方法可以直接比较底层节点的地址吗?我想它的前身和后继都有链接,如果是唯一的元素foo,它们应该彼此相等。foo

0 投票
0 回答
63 浏览

c++ - 如何隐藏 Boost 侵入式列表挂钩?

在以下代码中:

我怎样才能使list_node私有?