笔记
Forward_list 不支持pop_back和—操作。
Vector, string 不支持push_front和pop_front。
List迭代器和关联容器迭代器不支持算数运算(凡是不支持随机访问其元素的容器都不支持算数运算)。
数组的begin和end函数,int ia[3],begin(ia)返回指向ia首元素的指针,end(ia)返回指向ia尾元素下一位置的指针,这两个函数定义在iterator头文件中
千万不能出现 curr = sflst.insert_after(prev,s)的情况,因为insert_after(p, t)返回的是一个指向新添加元素t的迭代器,所以刚才的等式右边返回的的是一个指向s的迭代器,此等式是将s插入到curr之前,之后curr自加之后再解引用还是和s相等,所以程序陷入了死循环,
void test_and_insert(forward_list<string> &sflst, const string & s1, const string &s2)
{
auto prev = sflst.before_begin();
auto curr = sflst.begin();
bool inserted = false;
while (curr != sflst.end())
{
if (*curr == s1)
{
curr = sflst.insert_after(prev, s2);
//curr = sflst.insert_after(curr, s2);
inserted = true;
}
prev = curr;
++curr;
}
if (!inserted)
sflst.insert_after(prev, s2);
}