当前位置: 首页 > 知识库问答 >
问题:

如何用标准跨度进行边界检查?

况鸿雪
2023-03-14

std::vector和几乎所有其他容器都有一种非常方便的边界检查方法:at()std::span显然没有这个功能

  • 为什么?
  • 有替代者吗? 除了在()?
  • 推出您自己的 之外

共有2个答案

艾文斌
2023-03-14

将span引入标准库的论文说:

范围检查和边界安全

对跨域封装的数据的所有访问都在概念上进行范围检查,以确保它们保持在跨域的界限内。 当运行时未能满足SPAN的边界安全约束时,实际发生的是未定义的行为。

也就是说,操作具有狭义的契约,给了实现者自由。

如果您的标准库不允许您将行为控制到适当的粒度。 gsl-lite提供了可配置的合同违反行为的插入替换。 Microsoft GSL以前是可配置的,但现在总是在合同违反时终止,这里讨论(这可能是您想要的)。

西门品
2023-03-14

很笨重,但像这样:

  1. 使用位置
template<class Container>
auto& at(Container&& c, std::size_t pos){
    if(pos >= c.size())
        throw std::out_of_range("out of bounds");
    return c[pos];
}
template<class Iterator, class Container>
auto& at(Container&& c, Iterator&& it){
    if(std::distance(c.begin(), it) >= c.size())
        throw std::out_of_range("out of bounds");
    return *it;
}
 类似资料:
  • 本文向大家介绍如何利用Python 进行边缘检测,包括了如何利用Python 进行边缘检测的使用技巧和注意事项,需要的朋友参考一下 为何检测边缘? 我们首先应该了解的问题是:“为什么要费尽心思去做边缘检测?”除了它的效果很酷外,为什么边缘检测还是一种实用的技术?为了更好地解答这个问题,请仔细思考并对比下面的风车图片和它的“仅含边缘的图”: 可以看到,左边的原始图像有着各种各样的色彩、阴影,而右边的

  • 在前面的一些章节中,我们介绍了诸多用于图像分类的模型。在图像分类任务里,我们假设图像里只有一个主体目标,并关注如何识别该目标的类别。然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。在计算机视觉里,我们将这类任务称为目标检测(object detection)或物体检测。 目标检测在多个领域中被广泛使用。例如,在无人驾驶里,我们需要通过识别拍摄到

  • 根据 FileInputFormats定义的逻辑记录通常不适合HDFS块。例如,TextInputFormat的逻辑记录是行,它们通常会跨越HDFS边界。这与程序的功能无关--例如,行不会丢失或中断--但值得了解,因为这确实意味着数据本地映射(即与输入数据运行在同一主机上的映射)将执行一些远程读取。这导致的轻微开销通常并不显著。 假设记录行被分成两个块(b1和b2)。处理第一个块(b1)的映射器将

  • 主要内容:分配算法,回收算法本节介绍一种解决系统中内存碎片过多而无法使用的方法—— 边界标识法。 在使用边界标识法的系统管理内存时,可利用空间表中的结点的构成如图 1: 图 1 结构构成 每个结点中包含 3 个区域, head 域、 foot 域 和  space 域: space 域表示为该内存块的大小,它的大小通过 head 域中的 size 值表示。 head 域中包含有 4 部分:llink 和 rlink 分别表示

  • 问题内容: 在该代码中,我使用鼠标滚轮来放大/缩小HTML5 Canvas。我找到了一些可以标准化Chrome和Firefox之间速度差异的代码。但是,Safari中的缩放处理比任何一个都快得多。 这是我目前拥有的代码: 我可以使用什么代码在Chrome v10 / 11,Firefox v4,Safari v5,Opera v11和IE9上以相同数量的鼠标滚轮滚动获得相同的“增量”值? 编辑 :

  • 本文向大家介绍如何使用Python标准库进行性能测试,包括了如何使用Python标准库进行性能测试的使用技巧和注意事项,需要的朋友参考一下 Profile 和 cProfile 在 Python 标准库里面有两个模块可以用来做性能测试。 1. 一个是 Profile,它是一个纯 Python 的实现,所以会慢一些,如果你需要对模块进行拓展,那么这个模块比较合适。 2. 第二个是 cProfile,

  • 我想从创建一个排序词 以下是我到目前为止的情况。 我不理解编译器的信息: 我到底做错了什么?

  • 问题内容: 我正在研究信号分类问题,想先缩放数据集矩阵,但是我的数据是3D格式(批,长度,通道)。 我尝试使用Scikit-learn Standard Scaler: 但是我收到了以下错误消息: 找到具有暗3的数组。StandardScaler预期<= 2 我认为一种解决方案是将每个通道的矩阵分成多个2D矩阵,分别缩放比例,然后放回3D格式,但我想知道是否有更好的解决方案。 非常感谢你。 问题答