STL标准库-容器-forward_list
技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。
forward_list即单向list,功能少额外开销就小.而且只能在前段插入元素
结构如下
一 定义
#include <forward_list>
int main(int argc, const char * argv[]) { //a.定义 list<typeName> name; forward_list<int> l; //b.拷贝构造 forward_list<int> l1(l); //c.拷贝赋值 l1 = l; //d.按指定元素个数定义 含五个默认值是0的元素的链表 forward_list<int> l2(5); //e.指定元素个数及类型 含有5个值为2的链表 forward_list<int> l3(5,2); //f.指定赋值区域 forward_list<int> l4(l1.begin(),l1.end()); for(auto i : l) { cout<< i << endl; } return 0; }
二 与迭代器的使用
由于forward_list的迭代器内指向内存不连续 顾不能做迭代器 "+", "-" 操作
int main() { forward_list<int> l = {1,2,3,4,5,6,7,8,9,10}; //返回迭代器开始之前的位置 l.before_begin(); //返回第一个元素地址 l.begin(); //返回最后一个元素的下一个位置 l.end(); //返回迭代器开始之前的位置 l.cbefore_begin(); //返回第一个元素地址 l.cbegin(); //返回最后一个元素的下一个位置 l.cend(); return 0; }
三 容量
int main() { forward_list<int> l = {1,2,3,4,5,6,7,8,9,10}; //返回forward_list是否为空 cout << l.empty() << endl; //forward_list的最大容量 cout << l.max_size() << endl; return 0; }
四 元素访问
int main() { forward_list<int> l = {1,2,3,4,5,6,7,8,9,10}; //返回第一个元素 cout<< l.front() <<endl; return 0; }
五 操作
int main() { forward_list<int> l = {1,2,3,4,5,6,7,8,9,10}; iterator<forward_list<int>, int> i; for(auto i : l) { cout << i << " "; } cout<<"初始化"<<endl; //给l赋值成10个1 l.assign(10, 1); for(auto i : l) { cout << i << " "; } cout<<"assign()"<<endl; //前段插入0 l.push_front(0); for(auto i : l) { cout << i << " "; } cout<<"push_front()"<<endl; //在头部插入一组 参数为emplace_front(initializer_list<>) 初始化1 l.emplace_front(1); for(auto i : l) { cout << i << " "; } cout<<"emplace_front()"<<endl; //弹出第一个元素 l.pop_front(); for(auto i : l) { cout << i << " "; } cout<<"pop_front()"<<endl; //在指定位置后面插入一组数据 l.emplace_after(l.begin(), 0); for(auto i : l) { cout << i << " "; } cout<<"emplace_after()"<<endl; //在指定位置后面插入一组数据 l.insert_after(l.begin(), 0); for(auto i : l) { cout << i << " "; } cout<<"insert_after()"<<endl; //在指定位置之后插入元素 l.insert_after(l.begin(), 11); for(auto i : l) { cout << i << " "; } cout<<"insert_after()"<<endl; //删除指定位置 l.erase_after(l.begin(),l.end()); for(auto i : l) { cout << i << " "; } cout<<"erase_after()"<<endl; //交换并释l2 forward_list<int> l2 = {10,10,10,10}; l.swap(l2); for(auto i : l) { cout << i << " "; } cout<<"swap()"<<endl; //重新设定内存,不足补齐, 超过弹出尾部 l.resize(5,20); for(auto i : l) { cout << i << " "; } cout<<"resize()"<<endl; //清空 l.clear(); for(auto i : l) { cout << i << " "; } cout<<"clear()"<<endl; return 0; }
六 修改操作
int main() { //指定位置拼接链表 forward_list<int> l = {1,2,3,4,5,6,7,8,9,10}; forward_list<int> l1 = {0,1,2,3,4,5,6,7,8,9,10}; l.splice_after(l.before_begin(), l1); for(auto i : l) { cout << i << " "; } cout<<"splice_after()"<<endl; //删除指定元素 l.remove(10); for(auto i : l) { cout << i << " "; } cout<<"remove()"<<endl; //按指定条件删除 l.remove_if([](int x){return x<8;}); for(auto i : l) { cout << i << " "; } cout<<"remove_if()"<<endl; //排序 < l.sort(); for(auto i : l) { cout << i << " "; } cout<<"sort(<)"<<endl; l.sort([](int first, int second){return first > second;}); for(auto i : l) { cout << i << " "; } cout<<"sort(>)"<<endl; //删除重复元素 l.unique(); for(auto i : l) { cout << i << " "; } cout<<"unique()"<<endl; forward_list<int> l2 = {1,2,3,4,4,5,5,6,6,7,8,9,10}; //按指定要求删除元素(排序后) l2.unique([](int x, int y) { return (x == y) && (x < 6);}); for(auto i : l2) { cout << i << " "; } cout<<"unique([])"<<endl; forward_list<int> l3 = {1,3,5,7}; forward_list<int> l4 = {2,4,6,8}; //合并两个有序forward_list 合并后仍然有序 l3.merge(l4); for(auto i : l3) { cout << i << " "; } cout<<"merge()"<<endl; //翻转 l3.reverse(); for(auto i : l3) { cout << i << " "; } cout<<"reverse()"<<endl; //交换 多退少补 并释放l l3.swap(l); for(auto i : l3) { cout << i << " "; } cout<<"reverse()"<<endl; return 0; }