c/c++ 标准容器 forward_list, resize, 重新定位迭代器

1,forward_list特有的方法:

  • insert_after
  • emplace_after
  • erase_after

2,容器的插入删除操作后的注意事项

  • 必须保证每次改变容器的操作后都正确地重新定位迭代器。
  • 如果在循环中插入/删除deque,vector,string中的元素,不要缓存end返回的迭代器。

知识点

1,forward_list容器的使用,对应代码里的test1

2,resize的使用,对应代码里的test2

3,容器的插入删除操作后的注意事项,对应代码里的test3

#include <iostream>
#include <vector>
#include <string>
#include <list>
#include <forward_list>
#include <deque> using namespace std; int main(){
//test1 forward_list容器的使用
//insert_after,emplace_after,erase_after
/*
forward_list<int> fl{0,1,2,3,4,5};
//返回头迭代器
auto head = fl.before_begin();
//在head的后面插入6,并返回指向6的迭代器,第一个元素是6
auto it = fl.insert_after(head, 6);
cout << *it << endl;
for(auto s : fl){
cout << s << " ";
}
cout << endl;
auto it1 = fl.erase_after(it);
cout << *it1 << endl;
for(auto s : fl){
cout << s << " ";
}
cout << endl;
fl.pop_front();
for(auto s : fl){
cout << s << " ";
}
cout << endl;
*/ //test2 resize
//如果当前容器的大小大于所要求的大小,容器后部的元素会被删除;
//如果当前容器的大小小于所要去的大小,会讲新元素添加到容器的后部
/*
list<int> li(5,11);
cout << li.size() << endl;
for(auto s : li){
cout << s << " ";
}
cout << endl;
li.resize(7,2);
cout << li.size() << endl;
for(auto s : li){
cout << s << " ";
}
cout << endl;
li.resize(3,8);//因为3小于原来容器的大小7,所以第二个参数8就被忽略了
cout << li.size() << endl;
for(auto s : li){
cout << s << " ";
}
cout << endl;
*/ //test3 容器的插入删除操作可能使迭代器失效
vector<int> vi = {0,1,2,3,4,5,6,7,8,9};
auto it = vi.begin();
//这里每次都会重新去取得尾迭代器,不会有问题,
//如果提前把end保存了的话,改变vi后,end就失效了,会死循环等
while(it != vi.end()){
//奇数的时候
if(*it % 2){
it = vi.insert(it, *it);
//重新设定迭代器,让it指向下一个奇数
it += 2;
}
//偶数的时候
else{
it = vi.erase(it);
}
}
for(auto s : vi){
cout << s << " ";
}
cout << endl;
}

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ 标准容器 forward_list resize 操作的更多相关文章

  1. 对vector等STL标准容器的排序操作

    [+] STL提供的Sort 算法 所有sort算法介绍 sort 中的比较函数 sort 的稳定性 全排序 局部排序 nth_element 指定元素排序 partition 和stable_par ...

  2. 对vector等STL标准容器进行排序操作(转!)

    西方有句谚语:不要重复发明轮子! STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已 ...

  3. crop和resize操作区别

    crop:对图像进行剪切 resize:对图像进行伸缩 实践代码 import cv2 bb2d = [30, 30, 72 ,42] image = cv2.imread('car.png') pt ...

  4. Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41)

    Resize 的作用是调整 instance 的 vCPU.内存和磁盘资源. Instance 需要多少资源是定义在 flavor 中的,resize 操作是通过为 instance 选择新的 fla ...

  5. O041、Resize Instance 操作详解

    参考https://www.cnblogs.com/CloudMan6/p/5548294.html   Resize 的作用是调整instance的vCPU.内存和磁盘资源.   Instance  ...

  6. 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化

    1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...

  7. 顺序容器----顺序容器操作,vector对象如何增长,额外的string操作,容器适配器

    一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_ba ...

  8. Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)

    Migrate 操作的作用是将 instance 从当前的计算节点迁移到其他节点上. Migrate 不要求源和目标节点必须共享存储,当然共享存储也是可以的. Migrate 前必须满足一个条件:计算 ...

  9. Nova 操作汇总(限 libvirt 虚机) [Nova Operations Summary]

    本文梳理一下 Nova 主要操作的流程. 0. Nova REST-CLI-Horizon 操作对照表 Nova 基本的 CRUD 操作和 extensions: # 类别 Nova V2 REST ...

随机推荐

  1. Git 撤销所有未提交(Commit)的内容

    撸了好多代码,但是突然设计改了(~~o(>_<)o ~~):或者引入个第三方库,后来又发现用不着,想删掉,但文件太多了(比如几百个):那,怎么办呢,都不想了...Git 比人聪明,所以能很 ...

  2. TensorFlow中的通信机制——Rendezvous(二)gRPC传输

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 本篇是TensorFlow通信机制系列的第二篇文章,主要梳理使用gRPC网络传 ...

  3. 第8章 CentOS包管理详解

    8.1 Linux上构建C程序的过程 在说明包相关的内容之前,我觉得有必要说一下在Linux上构建一个C程序的过程.我个人并没有学习过C,内容总结自网上,所以可能显得很小白,而且也并非一定正确,只希望 ...

  4. EF 延时加载与死锁

    第一种 #region 第一种延迟加载 用到的时候就会去查询数据. //用到的时候就会去查询数据. //IQueryable<UserInfo> temp = from u in dbCo ...

  5. WPF Grid布局

    本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...

  6. Startup在不同环境中的处理

    ASP.NET Core引进了在多种环境中对控制应用程序行为的进一步支持,例如开发环境(Development Environment).预发布环境(Staging Environment),和生产环 ...

  7. c# 破解谷歌翻译

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 推荐数据库、Web、Net、架构的PDF数据,书不在多,在看!

    先收藏,后看:千万不要做一个屯书的人,一定要坚持有选择性的看下去: 数据库类 SqlServer Oracle .NET  更多... Web  更多... 架构 不刮了,直接可以看到了. 链接: h ...

  9. String为什么是不可变的?

    前几天一个面试被问到String为什么是不可变的?, 自我感觉当时回答的不太理想, 事后总结一下 不可变的是什么 我们谈论的String不可变, 指的是字符串的值不可变 例: String s = & ...

  10. MySQL技巧(一)

    NOT IN 与 IN 假设我们又一张score表如下 我们需要查询所有不是性别代号为"0"的学生数据 ); 很明显,not in 就是排除的意思. exists 与 not ex ...