[C++] C++中的begin和end
容器:begin和end函数begin和end是vector的两个成员函数begin和endbegin:返回指向容器第一个元素的迭代器end:返回指向容器最后一个元素下一个位置的迭代器begin和end返回的具体类型由对象是否是常量决定:如果对象是常量,begin和end返回const_iterator如果对象不是常量,返回iteratorvector<int> v1;const ve
·
容器:begin和end函数
begin和end是容器的两个成员函数
除了vector之外,标准库还定义了其他几种容器,所有标准库容器都可以使用迭代器
严格来说string类型不属于容器类型,但string支持很多与容器类似的操作
和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员
-
begin和end
-
begin:返回指向容器第一个元素的迭代器
-
end:返回指向容器最后一个元素下一个位置的迭代器
begin和end返回的具体类型由对象是否是常量决定:
- 如果对象是常量,begin和end返回const_iterator
- 如果对象不是常量,返回iterator
vector<int> v1; const vector<int> v2; auto itr1 = v1.begin();//itr1的类型是vector<int>::iterator,返回指向容器第一个元素的迭代器 auto itr2 = v2.end();//itr2的类型是vector<int>::const_iterator,返回指向容器最后一个元素下一个位置的迭代器
-
-
cbegin和cend
C++11新标准引入的两个新运算符
- cbegin:返回指向容器第一个元素的迭代器
- cend:返回指向容器最后一个元素下一个位置的迭代器
重点是,不论vector对象(或者string对象)是否是常量,返回的都是const_iterator。
vector<int> v1; auto itr1 = v1.cbegin();//itr1的类型是vector<int>::const_iterator,返回指向容器第一个元素的迭代器
-
rbegin和rend
带r的版本返回反向迭代器
反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器
- 递增一个迭代器(++it)会移动到前一个元素
- 递减一个迭代器(–it)会移动到下一个元素
除了forward_list之外,其他容器都支持反向迭代器,反向迭代器也有const和非const版本
- crbegin:返回指向容器尾元素位置的const迭代器
- crend:返回指向容器首元素之前一个位置的const迭代器
- rbegin:返回指向容器尾元素位置的迭代器
- rend:返回指向容器首元素之前一个位置的迭代器
数组:标准库函数begin和end
定义在iterator头文件中
数组不是类型,所以这两个begin和end不是成员函数.
- begin:返回指向数组首元素的指针
- end:返回指向数组尾元素下一个位置的指针
int a[] = {1, 2, 3, 4 ,5};//a是一个含有5个整型的数组
int *fir = begin(a);//指向a首元素的指针
int *las = end(a);//指向a尾元素下一个位置的指针
注意尾后指针不能执行解引用和递增操作。
更多推荐
所有评论(0)