forword_list是C++11新增的一个顺序容器,它是支持从容器的任何位置快速插入和移动元素的容器。不支持快速随机访问。它实现为单链表,且实质上与其在C中实现相比无任何开销。与std::list相比,此容器在不需要 双向迭代时提供更有效地利用空间的存储。下面我们来学习它的 基本用法,首先来看它的创建,初始化,赋值,元素访问front,内容接换swap,判空empty等操作

代码实现:

#include <forward_list>
#include <iostream>using namespace std;void createForword_listInit()
{//1.创建空forword_listforward_list<int> list1;cout << "list1.isEmpty = " << list1.empty() << endl;//2.创建list2有2个元素,值为随机值forward_list<int> list2(2);cout << "list2.isEmpty = " << list2.empty() << endl;cout << "list2的值为:" << endl;for(auto &val: list2){cout << val << "\t";}cout << endl;//3.创建list3有3个元素,分别为21, 22, 23forward_list<int> list3 = {21, 22, 23};cout << "list3.isEmpty = " << list3.empty() << endl;cout << "list3的值为:" << endl;for(auto &val: list3){cout << val << "\t";}cout << endl;//4.创建list4,用list3赋值forward_list<int> list4 = list3;//forward_list<int> list4(list3);//这两种方法都可以cout << "list4.isEmpty = " << list4.empty() << endl;cout << "list4的值为:" << endl;for(auto &val: list4){cout << val << "\t";}cout << endl;//5.创建list5用assign进行赋值forward_list<int> list5;list5.assign({24, 25, 26, 27});cout << "list5的值为:" << endl;for(auto &val: list5){cout << val << "\t";}cout << endl;//6.创建list6用list4进行初始化forward_list<int> list6(list4.begin(), list4.end());cout << "list6的值为:" << endl;for(auto &val: list6){cout << val << "\t";}cout << endl;//7.创建list7用assign设定容器大小和初始值forward_list<int> list7;list7.assign(5, 18);//list7有5个元素,每个元素为18cout << "list7的值为:" << endl;for(auto &val: list7){cout << val << "\t";}cout << endl;//8.访问forward_listforward_list<int> list8;list8.assign({28, 28});cout << "list8.front = " << list7.front() << endl;cout << "list8的值为:" << endl;for(auto &val: list8){cout << val << "\t";}cout << endl;//9.swap交换两个forward_listauto it1 = list6.begin();auto it2 = list8.begin();int &ref1 = list6.front();int &ref2 = list8.front();cout << "*it1 = " << *it1 << " *it2 = " << *it2 << " ref1 = " << ref1 << " ref2 = " << ref2 << endl;cout << "swap after======" << endl;list6.swap(list8);cout << "list6的值为:" << endl;for(int c: list6){cout << c << "\t";}cout << endl;cout << "list8的值为:" << endl;for(int c: list8){cout << c << "\t";}cout << endl;cout << "*it1 = " << *it1 << " *it2 = " << *it2 << " ref1 = " << ref1 << " ref2 = " << ref2 << endl;cout << endl;
}int main()
{createForword_listInit();cout << endl;cout << "Hello World!" << endl;return 0;
}

运行结果:

注意,交换后迭代器与引用保持与原来的元素关联,例如it1指向的元素还是21,ref1引用的元素还21。

参考:

https://zh.cppreference.com/w/cpp/container/forward_list

forword_list学习之创建,初始化assign,赋值操作operator=, 元素访问front,交换内容swap,检查容器是否为空empty相关推荐

  1. multimap学习之创建,初始化,赋值操作operator=, empty,size,max_size

    multimap 是关联容器,含有键值对的已排序列表,其功能与map一样,唯一不同的是,它容许多个元素拥有同一键.本篇学习map的创建,初始化,赋值操作operator=, empty,size,ma ...

  2. multiset学习之创建,初始化,赋值操作operator=, empty,size

    本篇开始学习multiset,与set相比,multiset可以有多个相关的关键字,其它也set的功能一样,下面我们先来学习它的创建,初始化,赋值操作operator=, empty,size等相关操 ...

  3. set学习之创建,初始化,赋值操作operator=, empty,size

    set 是关联容器,含有 Key 类型对象的已排序集.用比较函数 比较 (Compare) 进行排序.搜索.移除和插入拥有对数复杂度. set 通常以红黑树实现.本篇学习set的创建及初始化. 示例代 ...

  4. List的初始化和赋值操作

    //初始化 //1.构造 List 后使用 List.add 初始化 List<String> stringList = new LinkedList<>(); stringL ...

  5. html jq移到出现内容,jquery操作html元素之( 获得内容和属性)

    jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力. jQuery 提供一系列与 DOM 相关的方法,这使访问和操作元素和属性变得很容易. 提示:DOM = Docu ...

  6. java删除数组中指定元素_java学习中如何删除数组中的指定元素

    java的api中,并没有提供删除数组中元素的方法.虽然数组是一个对象,不过并没有提供add()remove()或查找元素的方法.这就是为什么类似ArrayList和HashSet受欢迎的原因. 不过 ...

  7. c++ map初始化同时赋值_Golang学习笔记五--map

    map的创建 func main() {//创建 mapstudens := map[string]string{"name": "张三","age& ...

  8. C语言--关于指针两种初始化赋值操作

    首先,什么叫做指针的初始化?  int * p = NULL:在定义指针变量p的同时把p的值设置为0x00000000;而不是把*p的值设置为0x00000000.这个过程叫做初始化. 探讨: int ...

  9. 深度学习(6)TensorFlow基础操作二: 创建Tensor

    深度学习(6)TensorFlow基础操作二: 创建Tensor 一. 创建方式 1. From Numpy,List 2. zeros,ones (1) tf.zeros() (2) tf.zero ...

最新文章

  1. 记于2014-12-9
  2. android 混淆打包教程,Android studio 混淆打包
  3. 2016年ADAS行业发展潜力及行业发展趋势分析【图】
  4. nuxt.js的核心代码_Nuxt.js中的通用应用程序代码结构
  5. 高橋君とカード / Tak and Cards(AtCoder-2037)
  6. c++ 表达式必须包含指向类的指针类型_C++:18const关键字(附常量指针、指针常量、常量指针常量)...
  7. 【原创】centos常见问题集锦
  8. 使用Rich Edit控件
  9. 二阶切比雪夫多项式实现(scala版、python版)
  10. build lavas 失败_构建配置 - Lavas 教程
  11. 一文了解CSP、NOIP、NOI 三大信息学赛事
  12. 14年和15年的IT公司排行
  13. 瓜娃系列 (6) - ComparisonChain和primitives包
  14. Linux wait和waitpid和kill
  15. android声纹识别技术,基于Android平台的声纹识别系统的研究与实现
  16. Right Backup(云端数据备份软件)v8.1官方版
  17. 传统企业怎么通过抖音引流到微信
  18. Python用Pillow(PIL)进行简单的图像操作(边缘增强、锐利、平滑等)
  19. PHP开发之-微信网页授权获取用户基本信息
  20. 8-9(CCPD车牌数据集)

热门文章

  1. 淘宝无痕下单生成器一拖多入口生成器(附api生成接口以代码)
  2. managedQuery过时的解决办法
  3. 红包雨架构设计---2、流程设计
  4. 在java项目中咋样测试接口_请问java程序的接口中的测试类该怎么写?有什么用呢?...
  5. java内存泄漏和内存溢出
  6. linux编译器更新,英特尔 Fortran 编译器 Linux 版
  7. cuda必须装在c盘吗_CUDA一些小知识整理
  8. Java static修饰方法
  9. can‘t resolve symble R
  10. Linux系统selinux目录,SELinux深入理解