技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。

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(); //e.指定元素个数及类型 含有5个值为2的链表
forward_list<int> l3(,); //f.指定赋值区域
forward_list<int> l4(l1.begin(),l1.end()); for(auto i : l)
{
cout<< i << endl;
} return ;
}

二 与迭代器的使用

由于forward_list的迭代器内指向内存不连续 顾不能做迭代器 "+", "-" 操作

int main()
{
forward_list<int> l = {,,,,,,,,,}; //返回迭代器开始之前的位置
l.before_begin(); //返回第一个元素地址
l.begin(); //返回最后一个元素的下一个位置
l.end(); //返回迭代器开始之前的位置
l.cbefore_begin(); //返回第一个元素地址
l.cbegin(); //返回最后一个元素的下一个位置
l.cend();
return ;
}

三 容量

int main()
{
forward_list<int> l = {,,,,,,,,,}; //返回forward_list是否为空
cout << l.empty() << endl; //forward_list的最大容量
cout << l.max_size() << endl; return ;
}

四 元素访问

int main()
{
forward_list<int> l = {,,,,,,,,,}; //返回第一个元素
cout<< l.front() <<endl; return ;
}

五 操作

int main()
{
forward_list<int> l = {,,,,,,,,,};
iterator<forward_list<int>, int> i;
for(auto i : l)
{ cout << i << " ";
}
cout<<"初始化"<<endl; //给l赋值成10个1
l.assign(, );
for(auto i : l)
{
cout << i << " ";
}
cout<<"assign()"<<endl; //前段插入0
l.push_front();
for(auto i : l)
{
cout << i << " ";
}
cout<<"push_front()"<<endl; //在头部插入一组 参数为emplace_front(initializer_list<>) 初始化1
l.emplace_front();
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(), );
for(auto i : l)
{
cout << i << " ";
}
cout<<"emplace_after()"<<endl; //在指定位置后面插入一组数据
l.insert_after(l.begin(), );
for(auto i : l)
{
cout << i << " ";
}
cout<<"insert_after()"<<endl; //在指定位置之后插入元素
l.insert_after(l.begin(), );
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 = {,,,};
l.swap(l2);
for(auto i : l)
{
cout << i << " ";
}
cout<<"swap()"<<endl; //重新设定内存,不足补齐, 超过弹出尾部
l.resize(,);
for(auto i : l)
{
cout << i << " ";
}
cout<<"resize()"<<endl; //清空
l.clear();
for(auto i : l)
{
cout << i << " ";
}
cout<<"clear()"<<endl; return ;
}

六 修改操作

int main()
{
//指定位置拼接链表
forward_list<int> l = {,,,,,,,,,};
forward_list<int> l1 = {,,,,,,,,,,}; l.splice_after(l.before_begin(), l1);
for(auto i : l)
{
cout << i << " ";
}
cout<<"splice_after()"<<endl; //删除指定元素
l.remove();
for(auto i : l)
{
cout << i << " ";
}
cout<<"remove()"<<endl; //按指定条件删除
l.remove_if([](int x){return x<;});
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 = {,,,,,,,,,,,,}; //按指定要求删除元素(排序后)
l2.unique([](int x, int y) { return (x == y) && (x < );});
for(auto i : l2)
{
cout << i << " ";
}
cout<<"unique([])"<<endl; forward_list<int> l3 = {,,,};
forward_list<int> l4 = {,,,};
//合并两个有序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 ;
}

STL标准库-容器-forward_list的更多相关文章

  1. STL标准库-容器-set与map

    STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...

  2. STL标准库-容器-set与multiset

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. set与multiset关联容器 结构如下 set是一种关联容器,key即value,value即key.它是自动排序,排序特点依据key se ...

  3. STL标准库-容器-deque

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. deque双向开口可进可出的容器 我们知道连续内存的容器不能随意扩充,因为这样容易扩充别人那去 deque却可以,它创造了内存 ...

  4. STL标准库-容器-vector

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. 向量容器vector是一个动态数组,内存连续,它是动态分配内存,且每次扩张的原来的二倍. 他的结构如下 一 定义 vector ...

  5. STL标准库-容器-list

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. list 表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接起来,从而允许向前和向后两个方向进行遍历.在list 的任 ...

  6. STL标准库-容器适配器

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class ...

  7. STL标准库-容器-rb_tree

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 红黑树,关联式容器底层实现(map set),在使用中基本运用不到,但是还是想了解一下他的运作方式 Red_Black tree ...

  8. STL标准库-容器-unordered_set

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 unordered_set与与unordered_map相似,这次主要介绍unordered_set unordered_set ...

  9. STL标准库-容器-map和multimap

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 map与multimap为关联容器,结构如下 map底层实现依然是rb_tree 他的data可以改,但是key不能改,因此ma ...

随机推荐

  1. Cocos2d-JS实现的打飞机

    一.前言 今天我们来讲一个最最最常见的一个小游戏--打飞机!是的,打飞机!还记得小时候在玩儿的雷电,应该是打飞机最早的样子了吧.直到现在,也有微信打飞机,全民飞机大战,全民打飞机等游戏的出现,这些游戏 ...

  2. 52. N-Queens II(数个数)

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  3. 89. Gray Code(公式题)

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  4. VS2010/MFC编程入门之十七(对话框:文件对话框)

    上一讲鸡啄米介绍的是消息对话框,本节讲解文件对话框.文件对话框也是很常用的一类对话框. 文件对话框的分类       文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见 ...

  5. A Practical Guide to Support Vector Classi cation

    <A Practical Guide to Support Vector Classication>是一篇libSVM使用入门教程以及一些实用技巧. 1. Basic Kernels: ( ...

  6. 初识CGI

    CGI Web 服务器只能生成静态内容,而用户请求动态内容时,Web服务器只能借助一些应用程序来实现.CGI时一套标准,它规定了Web服务器和应用程序之间的交互方式. 静态内容与动态内容 要想理解什么 ...

  7. TED #03# 10 ways to have a better conversation

    Teach you how to talk and how to listen Many of you have already heard a lot of advice on this, thin ...

  8. 前端学习笔记之CSS浮动浅析

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...

  9. SQL学习笔记三(补充-1)之MySQL存储引擎

    阅读目录 一 什么是存储引擎 二 mysql支持的存储引擎 三 使用存储引擎 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的 ...

  10. zabbix-2.4.7环境部署与初始化安装

    一.zabbix简介: zabbix的特点: - 安装与配置简单,学习成本低 - 支持多语言(包括中文) - 免费开源 - 自动发现服务器与网络设备 - 分布式监视以及WEB集中管理功能 - 可以无a ...