- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的几个项目中,我越来越需要高效地处理内存中的连续位序列 (*)。到目前为止,我已经编写了一堆可内联的独立函数,以选择“位容器”类型(例如 uint32_t
)为模板,用于获取和设置位,将“或”和“和”应用于它们的值,定位容器,将以位为单位的长度转换为以字节为单位的大小或以容器为单位的长度,等等……看起来是时候编写类了。
我知道 C++ 标准库有一个专门化的 std::vector<bool>
,许多人认为这是一个设计缺陷——因为它的迭代器不公开实际的 bool
,而是代理对象。无论这对于特化来说是好主意还是坏主意,这绝对是我正在考虑的东西 - 一个显式位代理类,希望“总是”被优化掉(用 constexpr
, noexcept
和 inline
进行很好的润滑) .因此,我在考虑是否可以从一个标准库实现中改编 std::vector
代码。
另一方面,我的预期类(class):
从这个意义上说,它更像是位的跨度类。那么也许从跨度开始?我不知道,跨度仍然不标准;跨度中没有代理...
那么什么是我实现的良好基础(编辑: 不是基类)? std::vector<bool>
? std::span
?两个都?没有任何?或者 - 也许我正在重新发明轮子,而这已经是一个已解决的问题?
注意事项:
std::bitset
。(*) - 到目前为止,SIMD 效率不高,但可能稍后会出现。此外,这可以用在 CUDA 代码中,我们不进行 SIMDize,但假装 channel 是正确的线程。
最佳答案
而不是 std::vector
或 std::span
我怀疑你的类的实现会与 std::bitset
有更多共同点。 ,因为它几乎是同一件事,除了(固定的)运行时确定的大小。
事实上,您可以采用典型的 std::bitset
实现并移动 <size_t N>
类中的模板参数作为 size_t size_
成员(或任何你喜欢的名字),你将拥有几乎没有变化的动态位集类。你可能想摆脱任何你认为笨拙的东西,比如采用 std::string
的构造函数。和 friend 。
最后一步是移除底层数据的所有权:基本上,您将移除构造函数中底层数组的创建,并使用一些指针维护现有数组的 View 。
如果您的客户不同意用于存储的底层无符号整数类型(您称之为“位容器”),那么您可能还需要使您的类成为该类型的模板,尽管如果这样会更简单每个人都同意说uint64_t
.
至于std::vector<bool>
去吧,你不需要太多:所有vector
是你想要的吗,std::bitset
可能也是如此:vector
的主要内容adds 是动态增长 - 但你说过你不想要那个。 vector<bool>
具有代表单个位的代理对象概念,但std::bitset
也是如此.
来自 std::span
您认为底层数据没有所有权,但我认为这实际上并不代表很多底层代码。您可能需要考虑 std::span
编译时已知大小 或 运行时提供的大小(由 Extent == std::dynamic_extent
表示)的方法,如果这对您有用(主要是如果您有时使用 compile -time 大小,并且可以专门化一些方法以在这种情况下更有效)。
关于c++ - 将非拥有位容器基于 std::vector<bool> 是个好主意吗?标准::跨度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50846848/
我有一个带有列的表提供者 implied(tiny int)(something like nullable bool) provi
我正在阅读 VideoFileWriter来自 AForge.Video.FFMPEG 的类(class)通过 ILSPY 组装(我很想看看特定方法是如何工作的)并发现了这个: public bool
这是我的完整代码... import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import
我有一个输入 list类型 [Maybe SomeType]和一个谓词 p类型 SomeType -> Bool ,我想回答这个问题“谓词 p 是否适用于所有碰巧在输入中的 SomeType ?”。
使用 !!x 有什么区别吗?对比(bool)x ? 假设__STDC_VERSION__ >= 199901L和 #include 他们都保证结果是0吗?或 1 ,并且无论 x 的大小和值如何,都不
我正在编写一些 C++ 代码,我想调用两个函数(checkXDirty 和 checkYDirty),并返回 true如果任一返回 true。即使一个返回 true 我也需要评估两者,所以我的第一个想
我注意到 bool在 QtCreator 中以不同于其他类型的颜色突出显示: 只有在包含某些 header 时才会发生这种情况,最终我将其追踪到 . QtCreator 的代码检查器似乎无法手动跟踪
有一个函数: func (first: Int) -> Int -> Bool -> String { return ? } 返回值怎么写?我对上面 func 的返回类型感到很困惑。 最
训练神经网络学习“异或” 我正在尝试使用“批量归一化”,我创建了一个批量归一化层函数“batch_norm1”。 import tensorflow as tf import nump
我已经创建了任务函数来验证我的 json 文件。一切正常,直到我没有使用结果。当我试图从 async task function 获得结果时它显示错误为 Cannot implicitly conve
我有一个函数 func login (parameters: [(String, Any)], completion: @escaping (Bool) -> Vo
我正在处理最近从 X/Motif 转移到 Qt 的 C++ 代码库。我正在尝试编写一个 Perl 脚本,它将用 bool 替换所有出现的 Boolean(来自 X)。该脚本只是做了一个简单的替换。 s
嗨,我正尝试创建一个Visiblity小部件,如果用户在Firebase数据库阵列上,该小部件将显示。看起来像这样(成员数组): 如您所见,我创建了一个StreamBuilder,如果当前用户的用户名
我创建了如下的rest api方法, Future activateAccount(int id, int code) async{ final body = {"code": '$c
在我的Flutter应用中,我有一个返回Future的函数,但我想将结果作为Stream。这是函数: Future isGpsOn() async { if (await Geolocat
我可以看到 BOOLEAN 覆盖了 __visit_name__ class BOOLEAN(Boolean): __visit_name__ = 'BOOLEAN' 控制调度员选择的访问者方
考虑以下代码: bool x; bool? y = null; x = y?? true; 将 bool? 分配给 bool 是一个编译时错误,但上面的代码在编译和运行时都成功了。为什么?尽管第三条语
我正在重写一些 Javascript 代码以在 Excel VBA 中工作。由于在这个网站上搜索,我已经设法翻译了几乎所有的 Javascript 代码!但是,有些代码我无法准确理解它在做什么。这是一
我想拍一张bool来自Vec并在 if 语句中进行比较。如何解决以下错误? | 7 | if cell { | ^^^^ expected
我在我的应用程序崩溃跟踪工具中发现了一些崩溃。基本上我有一个 tabBarController,其中一个选项卡有一个嵌入式 UIWebView,另一个选项卡有一个带有 UITableView 的 Co
我是一名优秀的程序员,十分优秀!