什么是;[ptr,ptr+;len)必须是有效范围“平均值?”? 在C++标准中的不同地方,短语:
要求:什么是;[ptr,ptr+;len)必须是有效范围“平均值?”? 在C++标准中的不同地方,短语:,c++,stl,language-lawyer,C++,Stl,Language Lawyer,要求:[p,p+len)是有效范围 (其中p是指针,len是数字) 迭代器的替代版本是: 要求:[第一个,最后一个)是有效范围 这意味着什么?这意味着第一个包括和p+len或最后一个之间的所有内容都必须是唯一有效的 这一切都取决于C++允许过去数组指针的末尾存在,只要你只使用它们来引用数组的“结束”,而不必对它们进行删除。 因此,如果我有: int my_array[10]; int* first = &my_array[0]; int* last = &my_array[10
[p,p+len)
是有效范围
(其中p是指针,len
是数字)
迭代器的替代版本是:
要求:[第一个,最后一个)
是有效范围
这意味着什么?这意味着
第一个包括和p+len
或最后一个之间的所有内容都必须是唯一有效的
这一切都取决于C++允许过去数组指针的末尾存在,只要你只使用它们来引用数组的“结束”,而不必对它们进行删除。
因此,如果我有:
int my_array[10];
int* first = &my_array[0];
int* last = &my_array[10];
然后first
和last
表示一个有效范围,即使last
在技术上指向无效的地方
同样的原理也适用于迭代器,其中容器的end()
实际上根本不是容器数据的一部分
乍一看,这一切可能看起来相当奇怪,但这种表示范围的方式允许以合理的方式处理空范围。我认为C++17
标准的相关部分就在这里
27.2.1一般[迭代器.requirements.general]
8迭代器j
可从迭代器i
调用可到达,当且仅当存在使i==j
成为i
的表达式的有限应用程序序列时。如果j
可从i
到达,则它们引用相同se的元素淬火
9大多数在数据结构上操作的库算法模板都有使用范围的接口。范围是一对指定计算开始和结束的迭代器。范围[i,i)
是空范围;一般来说,范围[i,j)
指数据结构中的元素,从i
指向的元素开始,到j
指向的元素,但不包括j
指向的元素。范围[i,j)
当且仅当可从i
访问j
时才有效。库中函数应用于无效范围的结果未定义
因此,提取相关部分:
8迭代器j
从迭代器i
调用可到达,当且仅当表达式++i
的应用程序的有限序列使得i==j
9…范围[i,j)
在且仅当j
可从i
访问时有效
因此,“有效范围”似乎是属于同一容器(或数组)的一对迭代器,j
比i
更远
但也不要忘记:
通常,范围[i,j)
是指数据结构中的元素,从i
指向的元素开始,直到但不包括j
指向的元素
因此i
和j
之间的所有迭代器(但不一定包括j
)必须在“数据结构中”(即不超出范围).你能详细说明一下吗?你不明白什么?人力资源管理。我找了这个问题,没有找到DUP。其他人比我更擅长搜索。我也准备好了答案。这些都是非常糟糕的DUP目标,完全没有找到“是有效范围”部分。重新打开。“有效”表示允许您访问的范围,不会导致UB。如果混淆是关于间隔符号,那么。这也意味着您可以围绕变量形成一个范围:int a;int*begin=&a;int*end=&a+1;
:)