第2关:还原键盘输入(list)

题目:

第2关:还原键盘输入(list)_第1张图片

第2关:还原键盘输入(list)_第2张图片 

知识点: 

列表list相较于数组:

        优势:可在任意指定位置插入或者删除元素而不影响列表其他地方 。

        劣势:无法直接进行下标索引,需要迭代器it逐个遍历。

代码:

#include 
#include 
#include 
using namespace std;

int main()
{
    /********* Begin *********/
    //读取输入,解析并输出复原后的输出
    string s;
    listl;
    list::iterator it=l.begin();
    while(cin>>s){
        int i=0;
        while(i='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z'||s[i]>='0'&&s[i]<='9')
                l.insert(it,s[i]);
                    //**!为何迭代器it不用it++,不然不就一直指向l.begin()了吗?!**//
            else if(s[i]=='>')it++;
            else if(s[i]=='<')it--;
            else if(s[i]=='[')it=l.begin();
            else if(s[i]==']')it=l.end();

            i++;
        }
    }
    
    
    /********* End *********/
}

问题: 

 为何迭代器it不用it++,不然不就一直指向l.begin()了吗?

 

在这段代码中,`it` 是一个插入迭代器,用于将元素插入到列表 `l` 中。当调用 `l.insert(it, s[i])` 时,`it` 不需要手动增加,因为 `insert` 方法会在 `it` 指向的位置插入元素,并且会自动更新 `it`,使其指向新插入的元素。

因此,在这个情况下,不需要手动增加 `it`,因为 `insert` 方法会自动更新迭代器的位置。

 

你可能感兴趣的:(头歌,STL,list,c++,算法)