首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >半开范围和非终值是什么?

半开范围和非终值是什么?
EN

Stack Overflow用户
提问于 2012-10-25 10:45:55
回答 3查看 10.9K关注 0票数 24

这些术语在C++中是什么意思?

end值执行1.操作

2.半开放范围- [begin, off_the_end)

我在阅读有关for循环的文章时遇到了它们。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-25 10:58:54

半开范围是包含第一个元素,但不包括最后一个元素的范围。

范围[ 1,5]是半开的,由值1、2、3和4组成。

"off the end“或"past the end”指的是紧跟在序列末尾的元素,它的特殊之处在于允许迭代器指向它(但您可能看不到实际值,因为它不存在)。

例如,在以下代码中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char arr[] = {'a', 'b', 'c', 'd'};

char* first = arr
char* last = arr + 4;

first现在指向数组的第一个元素,而last指向数组末尾的另一个元素。我们被允许指向数组末尾的最后一位(但不能超过两位),但我们不能尝试访问该位置的元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// legal, because first points to a member of the array
char firstChar = *first;
// illegal because last points *past* the end of the array
char lastChar = *last;

我们的两个指针firstlast一起定义了它们之间的所有元素的范围。

如果它是一个半开范围,那么它包含first所指向的元素,以及其间的所有元素,但不包含last所指向的元素(这很好,因为它实际上并不指向有效元素)

在C++中,所有标准库算法都在这样的半开放范围内运行。例如,如果我想要将整个数组复制到其他位置dest,我会这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::copy(first, last, dest)

一个简单的for循环通常遵循类似的模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (int i = 0; i < 4; ++i) {
    // do something with arr[i]
}

这个循环从0到4,但它排除了结束值,因此覆盖的索引范围是半开放的,特别是[0, 4)

票数 36
EN

Stack Overflow用户

发布于 2012-10-25 10:52:08

这些不是C++特定的术语,它们是一般的数学术语。

[]和()表示范围是否包括/不包括端点:

  • [包括终结点
  • (排除终结点
  • []= 'Closed',包括两个终结点
  • () = 'Open',排除两个终结点
  • )和(均为‘半开放’,仅包括一个终结点

大多数C++ -循环覆盖半开范围(包括第一个元素:例如for int i=0;,但排除最后一个元素:i < foo,而不是i ≤ foo)

票数 23
EN

Stack Overflow用户

发布于 2017-02-15 09:12:08

正如在其他答案中所解释的,半开域也是一个数学术语,并且在编程上下文中使用该术语,这意味着起点是included,而终点是excluded

在C/C++编程的上下文中,它实际上是什么意思?比方说,您将打印整数数组的元素。对于C语言,因为您对数组的大小没有任何运行时知识,所以您有两个选择。要么你必须提供数组的大小,因此函数签名将如下所示;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void printArray(int * array, int size);

或者,您必须使用半开范围,这意味着,除了数组本身之外,您还必须提供开始和结束指针(并且函数将处理包括开始,不包括结束的指针)。函数签名如下;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void printArray(int * array, int * begin, int * end);

为了说明这一点,这里有一个提供数组大小的示例;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

void printArray(int * array, int size)
{
    printf("Array: ");

    for(int i = 0; i < size; i++)
        printf("%2d ", array[i]);

    printf("\n");
}

int main()
{
    int array[5] = { 1, 2, 3, 4, 5 };

    printArray(array, 5);

    return 0;
}

在上面的示例中,我们向printArray函数传递了两个参数,因为它在函数签名上很明显,指向数组的第一个元素(或数组本身)的指针和数组的大小。

然而,正如我上面所写的,我们也可以在函数签名中使用半开范围,如下所示;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

void printArray(int * array, int * begin, int * end)
{
    printf("Array: ");

    for(int * index = begin; index != end; index++)
        printf("%2d ", *index);

    printf("\n");
}

int main()
{
    int array[5] = { 1, 2, 3, 4, 5 };

    printArray(array, array, array+5);

    return 0;
}

这两个代码将产生相同的输出,如下所示;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Array:  1  2  3  4  5

如您所见,printArray函数打印范围[begin, end)的函数。index实际上是指向整数数组元素的指针,从begin开始,它包括begin,当index等于end指针时,for循环结束,不包括处理end。这就是我所谓的半开放范围

半开放范围C++约定

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13066884

复制
相关文章
【数据】即使不会爬虫技术,也能轻松获取的重要数据
小编邀请您,先思考: 1 对于具体的业务问题,如何做好数据准备? 很多做数据分析的同学,对数据的获取有一个误区,觉得在互联网上获取数据,必须通过爬虫进行爬取。殊不知,有些必须知道的数据,即使不会爬虫的技能,也可以轻松获取。 根据这些数据类型的不同,我把它们划分为实时数据、趋势数据以及关联数据,这里,我们先来了解一下,互联网上,有哪些基于地理位置信息的实时数据。 一、实时数据 实时数据,顾名思义,是事物当前状态的数据。更好的,经过整合的实时数据,可以为我们尽早地处理问题,提供最佳的契机。 那么,互联网上,有
陆勤_数据人网
2018/04/18
5.1K0
【数据】即使不会爬虫技术,也能轻松获取的重要数据
时钟也能虚拟化吗
我们知道kvm有一个半虚拟化的时钟kvm-clock,但是现在只对Linux Guest支持,半虚拟化的时钟具有准确高效的有点,而使用TSC和RTC等时钟存在效率低高延迟的缺点,本文具体介绍一下虚拟化下的时钟原理。
虚拟化云计算
2018/04/08
3.8K0
时钟也能虚拟化吗
[javaEE] web应用的目录结构&配置虚拟主机
|--web.xml 整个web的配置文件,配置主页,Servlet的映射,过滤器,监听器的配置
唯一Chat
2019/09/10
8030
Web Security 之 HTTP Host header attacks
在本节中,我们将讨论错误的配置和有缺陷的业务逻辑如何通过 HTTP Host 头使网站遭受各种攻击。我们将概述识别易受 HTTP Host 头攻击的网站的高级方法,并演示如何利用此方法。最后,我们将提供一些有关如何保护自己网站的一般建议。
凌虚
2021/03/19
5.9K0
Web Security 之 HTTP Host header attacks
Linux下配置基于Apache的Web虚拟主机
Web虚拟主机指的是在同一台服务器中运行多个web站点,其中的每个站点实际上并不独立占用整个服务器,因此被称为“虚拟”Web主机,通过虚拟Web主机服务可以充分利用服务器的硬件资源。
星哥玩云
2022/07/27
1.8K0
Linux下配置基于Apache的Web虚拟主机
我什么也不懂,能搞个自己的网站吗?能!
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
我被狗咬了
2019/11/12
2.3K0
你造吗,null 也能 toString()!
这时候呢,为了检验我的算法是否符合预期,通常我会在这里把这个 MatchPoint 打印出来,不巧的是 Android 的日志函数签名长这样:
bennyhuo
2020/02/20
3.5K0
在应用程序中发现不必要的 Http 响应头
陶然同学
2023/10/14
3740
在应用程序中发现不必要的 Http 响应头
你能发现这段 Python 代码中的 bug 吗?
原文链接:https://dwrodri.gitlab.io/can-you-spot-the-bug-in-this-python-code/
腾讯云 CODING
2023/08/18
1410
你能发现这段 Python 代码中的 bug 吗?
你能发现这段 Python 代码中的 bug 吗?
原文链接:https://dwrodri.gitlab.io/can-you-spot-the-bug-in-this-python-code/
腾讯云 CODING
2023/08/17
2120
你能发现这段 Python 代码中的 bug 吗?
读书也能收获工作经验吗?
我常常遇到这样的问题,我想考研,但考研读书是不是白白损失了三年工作经验积累的时间?
用户1756920
2018/07/23
3280
研究发现,电源指示灯的闪烁也能泄露密码
在巧妙的旁路攻击中,一组学者发现可以通过分析设备电源 LED 指示灯的变化来破解设备密钥。
FB客服
2023/08/08
2630
研究发现,电源指示灯的闪烁也能泄露密码
Apache配置虚拟主机_apache中配置虚拟主机的作用
修改Apache的虚拟主机配置文件 httpd-vhosts.conf,在文件的最后加上如下的代码:
全栈程序员站长
2022/10/01
7.8K0
仍然困惑区块链呢?即使是一个6岁的孩子也能理解
孩子们很好奇,有时他们的问题会让你大吃一惊。这事最近发生在我身上,当我一晚上下了电话。我6岁的儿子JJ问道:“爸爸,区块链是什么?” 你在开玩笑,对吧? 几乎自动地,脑海中浮现的短语是“一种分散的、分
架构师研究会
2018/07/25
4310
仍然困惑区块链呢?即使是一个6岁的孩子也能理解
挖洞经验 | 一个价值$3133.7美金的Google漏洞
在对Google的安全研究中,由于其云服务平台“cloud.google.com” 具备多种功能,感觉有点意思,所以某天我决定来深入测试一下它。
FB客服
2018/12/04
7610
挖洞经验 | 一个价值$3133.7美金的Google漏洞
Android系统中也存在Web注入吗?
有一类专门针对浏览器的攻击,被称为浏览器中间人(MITB)攻击。想要实现这类攻击,方式也非常的多,像恶意 DDL 注入,扩展欺骗或将一些特制的恶意代码注入到浏览器页面中,欺骗代理服务器等。MITB
FB客服
2018/02/09
9800
Android系统中也存在Web注入吗?
apache 虚拟主机的配置
由于项目的需要,开始学习php,开始就把我跟憋住了,配置虚拟主机,看网上的配置,跟着一步一步的走,总是不通,原来呢,是没有使用虚拟主机配置是成功。我就想着,得,从新开始配,把原来的httpd.conf给废掉,从新配置,还是报forbidden错误,访问受限,我就开始一点一点的修改访问权限。步骤如下:
用户5640963
2019/07/26
2.3K0
apache 虚拟主机配置详解_linux 配置虚拟主机
​ httpd.conf是Apache的主配文件,整个Apache也不过就是这个配置文件,里面几乎包含了所有的配置。有的distribution都将这个文件拆分成数个小文件分别管理不同的参数。但是主要配置文件还是以这个文件为主。只要找到这个文件名就知道如何设置了。后面会详细解释Apache主配文件的每一行配置
全栈程序员站长
2022/10/01
5K0
apache 虚拟主机配置详解_linux 配置虚拟主机
apache 虚拟主机配置详解_如何配置虚拟主机
1,Include conf/extra/httpd-vhosts.conf,去掉注释;
全栈程序员站长
2022/09/29
13.6K0
CSS也能像组件状态一样响应式更新?
我们用这三个维度分析下Vue的SFC(Single-File-Component,单文件组件):
公众号@魔术师卡颂
2021/08/26
8050
CSS也能像组件状态一样响应式更新?

相似问题

Web代理自动发现能泄漏HTTPS URL吗?

10

即使你没有连接,WiFi也能检测到你吗

20

即使地址栏显示HTTP,表单提交也能被加密吗?

30

即使我拿走了SIM卡,警察也能追踪我的手机吗?

20

WAF能转换HTTP响应吗?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文