c++map迭代器的移动详解
在洛谷上刷到一题需要用到我就研究了一下,题目链接:
https://www.luogu.com.cn/problem/P1563
基础知识:
成员方法 begin()返回指向容器中第一个(注意,是已排好序的第一个)键值对的双向迭代器。
成员方法end()返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin()结合使用。
advance()函数用于将迭代器前进(或者后退)指定长度的距离。advance(iterator,n)
需要注意的是,如果 it 为输入迭代器或者前向迭代器,则 n 必须为一个正数,即表示将 it 右移(前进) n 个位置;反之,如果 it 为双向迭代器或者随机访问迭代器,则 n 为正数时表示将 it 右移(前进) n 个位置,n 为负数时表示将 it 左移(后退) n 个位置。
举个例子:
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<int,string>mp;
mp[1]="singer";
mp[2]="reader";
mp[3]="mengbier";
mp[4]="thinker";
mp[5]="archer";
mp[6]="writer";
mp[7]="mogician";
map<int,string>::iterator it=mp.begin();
//标记处
cout<<it->first<<" "<<it->second<<endl;
return 0;
}
标记处语句为advance(it,3);时

标记处语句为advance(it,-3);时

为什么是倒数第二个的writer呢
-其实mogician的后面还有一个空间,也就是成员方法end()指向的空间,她虽然看不见但也算数。
本文来自博客园,作者:InfiniteProgress,转载请注明原文链接:https://www.cnblogs.com/Serendip1ty/articles/17990917

浙公网安备 33010602011771号