左闭右开原则
在 C++ 中,容器(如 vector
,set
,map
等)的迭代器都遵循左闭右开的原则。
也就是说,对于任何容器 c
,c.begin()
返回的迭代器指向容器的第一个元素,而 c.end()
返回的迭代器指向容器的“尾后”元素,也就是最后一个元素的下一个位置。
所以, c.end()
不指向任何有效元素,不能解引用得到元素,通常只作为范围结束的标志。
例如,下面的代码是遍历一个 vector
的标准方法:
vector<int> v = {
1, 2, 3, 4, 5};
for(auto it = v.begin(); it != v.end(); ++it) {
cout << *it << endl;
}
在这个例子中,v.begin()
返回的迭代器指向第一个元素 1
,v.end()
返回的迭代器指向尾后位置。我们一直迭代到 it
等于 v.end()
时停止,这时 it
已经不再指向任何有效元素。这就是左闭右开原则在 C++ 容器中的应用。
如果我们需要访问最后一个元素,应该用**反向迭代器*s.rbegin()**来实现。
示例:
//leetcode 6911.不间断子数组
class Solution {
public:
long long continuousSubarrays(vector<int> &nums) {
long