Pro*_*thu 20 c c++ language-agnostic math terminology
这些术语在C++中意味着什么?
1.关闭end价值
2. 半开放范围 - [begin, off_the_end)
我在阅读有关循环时遇到过它们.
jal*_*alf 30
半开放范围是包含第一个元素的范围,但不包括最后一个元素.
范围[1,5]是半开放的,由值1,2,3和4组成.
"越过末尾"或"越过末尾"是指序列结束后的元素,并且特殊之处在于允许迭代器指向它(但你可能不会看到实际值,因为它没有'存在)
例如,在以下代码中:
char arr[] = {'a', 'b', 'c', 'd'};
char* first = arr
char* last = arr + 4;
Run Code Online (Sandbox Code Playgroud)
first现在指向数组的第一个元素,而last指向一个超过数组末尾的元素.我们被允许在数组末尾指出一个(但不是两个过去),但我们不允许尝试访问该位置的元素:
// 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;
Run Code Online (Sandbox Code Playgroud)
我们的两个指针,first并last一起限定一个范围内的所有它们之间的元件.
如果它是半开放范围,那么它包含指向的元素first,以及它们之间的所有元素,但不包含指向的元素last(这很好,因为它实际上并不指向有效元素)
在C++中,所有标准库算法都在这样的半开放范围内运行.例如,如果我想将整个数组复制到其他位置dest,我这样做:
std::copy(first, last, dest)
Run Code Online (Sandbox Code Playgroud)
一个简单的for循环通常遵循类似的模式:
for (int i = 0; i < 4; ++i) {
// do something with arr[i]
}
Run Code Online (Sandbox Code Playgroud)
这个循环从0到4,但它排除了结束值,所以覆盖的索引范围是半开的,具体而言[0, 4)
jam*_*jam 21
这些不是C++特定术语,它们是一般数学术语.
[]和()表示范围是否包含/排除端点:
大多数C++ for循环覆盖半开放范围(包括第一个元素:例如for int i=0;,但排除最后一个元素:i < foo,不是i ? foo)