可以通过迭代器访问vector容器或者string中的元素。用vector<T>::iterator来表示迭代器。
1 begin()函数和end()函数
通过vector类的begin()和end()方法可以获取iterator。其中由begin()获取到的iterator叫做起始迭代器,由end()获取到的iterator叫做超出末端迭代器。起始迭代器指向vector保存的第一个数据,超出末端迭代器指向vector保存的最后一个数据的“下一个数据”。
2 相关代码
相关代码如图1所示。
图1 相关代码
其中,v1是包含了6个int类型元素的vector,it_begin是v1的起始迭代器,it_end是v1的超出末端迭代器。
3 起始迭代器和超出末端迭代器
起始迭代器和超出末端迭代器中包含了一个叫做ptr的变量,用于保存迭代器指向的内存地址,如图2所示。
图2 ptr变量
从图2中可以看出,起始迭代器it_begin的ptr值是0x009fd190(图2①),而超出末端迭代器的ptr值是0x009fd1a8(图2②)。
图3显示的是地址是0x009fd190的内存中的内容,图4显示的地址是0x009fd1a8的内存中显示的内容。
图3 0x009fd190的内存中的内容
图4 0x009fd1a8的内存中显示的内容
从图3中可以看到,起始迭代器的ptr指向的内存正是v1的第一个元素的地址。从图4可以看出超出末端迭代器的ptr指向的内存正是v1的最后一个元素(0x00000005)的“下一个元素”(0xfdfdfdfd)。