练习9.28 编写函数,接受一个forward_list<string>和两个string共三个参数。函数应在链表中查找第一个string,并将第二个string插入到紧接着第一个string之后的位置,若第一个string未在链表中,则将第二个string插入到链表的末尾。
分析:1.首先,要求是编写一个函数,有三个参数 ;
2.要求在链表中进行操作,则说明更改了输入给函数的链表的相关信息;
说明输入的链表需要使用引用,保证输入的链表在函数操作中被更改;得到的函数为:void MyFunc(forward_list<string>&flst,string strl1,string strl2)
3.根据要求需要在链表中查找第一个string,判断是否出现,并且知道位置;说明首先需要对strl1进行遍历,找到strl1停止,或者找到链表末尾(指向链表最后一个元素的后面)仍未找到停止;
代码:
#include <iostream> #include<forward_list> #include<string> using namespace std; void myFunc(forward_list<string>&flst, string strl1, string strl2) { auto prev = flst.before_begin(); auto curr = flst.begin(); while (curr != flst.end()) { if (*curr == strl1) //判断当前string是否与strl1相同 { flst.insert_after(curr, strl2); return; } prev = curr; ++curr; } flst.insert_after(prev, strl2); //prev指向最后一个元素,curr指向最后一个元素的后面,故该处使用prev } int main() { forward_list<string> flist{"year","month","day","hour"}; /*myFunc(flist, "year", "hello"); //在第一个元素的后面插入hello for (auto i : flist) { cout << i << endl; }*/ /*myFunc(flist, "day", "hello"); //在day后面插入hello for (auto i : flist) { cout << i << endl; }*/ myFunc(flist, "ok", "hello"); //元素列表中找不到ok,则会将hello插入到链尾 for (auto i : flist) { cout << i << endl; } return 0; }