本文主要是介绍C++ Primer 5th笔记(9)chapter9 顺序容器 forward_list,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 特殊的forward_list
单向链表的删除操作,真正删除的是某个元素后面的值(想想是为什么?)
操作 | 定义 |
---|---|
lst.before_begin() | 返回指向链表首元素之前不存在的元素的迭代器,此迭代器不能解引用。 |
lst.cbefore_begin() | 同上,但是返回的是常量迭代器。 |
lst.insert_after(p, t) | 在迭代器p之后插入元素。t是一个对象 |
lst.insert_after(p, n, t) | 在迭代器p之后插入元素。t是一个对象,n是数量。若n是0则函数行为未定义 |
lst.insert_after(p, b, e) | 在迭代器p之后插入元素。由迭代器b和e指定范围。 |
lst.insert_after(p, il) | 在迭代器p之后插入元素。由il指定初始化列表。 |
emplace_after(p, args) | 使用args在p之后的位置,创建一个元素,返回一个指向这个新元素的迭代器。若p为尾后迭代器,则函数行为未定义。 |
lst.erase_after§ | 删除p指向位置之后的元素,返回一个指向被删元素之后的元素的迭代器,若p指向lst的尾元素或者是一个尾后迭代器,则函数行为未定义。 |
lst.erase_after(b, e) | 类似上面,删除对象换成从b到e指定的范围。 |
eg. 如下输出为2468
forward_list<int> vi = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };auto prev = vi.before_begin();auto curr = vi.begin();while (curr != vi.end()){if (*curr % 2){curr = vi.erase_after(prev);}else {prev = curr;curr++;}}auto curr2 = vi.begin();while (curr2 != vi.end()) {cout << *curr2;curr2++;}
2. 改变大小
c.resize(n) 调整c的大小为n个元素,若n<c.size(),则多出的元素被丢弃。若必须添加新元素,对新元素进行值初始化
c.resize(n, t) 调整c的大小为n个元素,任何新添加的元素都初始化为值t
【引用】
- 代码 https://github.com/thefistlei/cplusprimer/blob/main/cprimer/cprimer/orderContainer.h
这篇关于C++ Primer 5th笔记(9)chapter9 顺序容器 forward_list的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!