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()指向的空间,她虽然看不见但也算数。

posted @ 2024-01-26 23:01  InfiniteProgress  阅读(108)  评论(0)    收藏  举报