标准库函数begin和end
在C++05中对于string类和各种容器类(如vector等)添加了T.begin()和T.end()两个成员函数,分别返回指向首元素的迭代器和尾后元素的迭代器。但是对于复合类型数组却一直只能用指针和数组元素地址来实现。以遍历输出数组为例:int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int *b = &a[0], *e = &a[10];//数组a
·
在C++05中对于string类和各种容器类(如vector等)添加了T.begin()和T.end()两个成员函数,分别返回指向首元素的迭代器和尾后元素的迭代器。但是对于复合类型数组却一直只能用指针和数组元素地址来实现。以遍历输出数组为例:
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *b = &a[0], *e = &a[10];//数组a只有10个元素,下标范围是0~9,用&a[10]可以获取尾元素之后那个并不存在的元素的地址
for (b; b != e; ++b)
std::cout << *b << std::endl;
为了统一string类和容器类与数组的操作,C++11引入了库函数begin()和end(),在iterator头文件中定义。这两个库函数与容器中的两个同名成员函数功能类似,不过数组毕竟不是类类型,因此这两个库函数不是成员函数,正确的使用形式是将数组作为它们的参数:
int *first = std::begin(a), *last = std::end(a);
for (first; first != last; ++first)
std::cout << *first << std::endl;
库函数begin()和end()的返回值分别是数组首元素的地址和尾后元素的地址。
本文内容摘自《C++ Primer(第5版)》
更多推荐
已为社区贡献2条内容
所有评论(0)