c/c++ 标准容器 forward_list resize 操作
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 操作的更多相关文章
- 对vector等STL标准容器的排序操作
[+] STL提供的Sort 算法 所有sort算法介绍 sort 中的比较函数 sort 的稳定性 全排序 局部排序 nth_element 指定元素排序 partition 和stable_par ...
- 对vector等STL标准容器进行排序操作(转!)
西方有句谚语:不要重复发明轮子! STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已 ...
- crop和resize操作区别
crop:对图像进行剪切 resize:对图像进行伸缩 实践代码 import cv2 bb2d = [30, 30, 72 ,42] image = cv2.imread('car.png') pt ...
- Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41)
Resize 的作用是调整 instance 的 vCPU.内存和磁盘资源. Instance 需要多少资源是定义在 flavor 中的,resize 操作是通过为 instance 选择新的 fla ...
- O041、Resize Instance 操作详解
参考https://www.cnblogs.com/CloudMan6/p/5548294.html Resize 的作用是调整instance的vCPU.内存和磁盘资源. Instance ...
- 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化
1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...
- 顺序容器----顺序容器操作,vector对象如何增长,额外的string操作,容器适配器
一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_ba ...
- Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)
Migrate 操作的作用是将 instance 从当前的计算节点迁移到其他节点上. Migrate 不要求源和目标节点必须共享存储,当然共享存储也是可以的. Migrate 前必须满足一个条件:计算 ...
- Nova 操作汇总(限 libvirt 虚机) [Nova Operations Summary]
本文梳理一下 Nova 主要操作的流程. 0. Nova REST-CLI-Horizon 操作对照表 Nova 基本的 CRUD 操作和 extensions: # 类别 Nova V2 REST ...
随机推荐
- Spark提高篇——RDD/DataSet/DataFrame(二)
该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...
- Video for Linux Two API Specification
V4L2 的使用规范,网址为:https://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.ht ...
- [转]VirtualBox centos7扩容
本文转自:https://www.cnblogs.com/xd502djj/p/7367704.html 有时候扩容还真不如重新建立一个大硬盘的系统,但是如果你安装了好多东西的话,那还是来扩容一下吧. ...
- Log4j的扩展RollingFileAppender、DailyRollingFileAppender
最常用的Appender--RollingFileAppender RollingFileAppender的一个Log4j配置样例: log4j.appender.R=org.apache.log4j ...
- 使用JavaScript获取URL中的参数(两种方法)
本文给大家分享两种方法使用js获取url中的参数,其中方法二是使用的正则表达式方法,大家可以根据需要选择比较好的方法,废话不多说了,直接看详细介绍吧. 方法一: //取url参数 var type = ...
- #WEB安全基础 : HTML/CSS | 0x1初识CSS
"我受够这些难看的网页了,我怎么才能让它变得好看点?"你说. 我答道:"看来你得学点CSS了" 学习这些东西只有一个原则,就是用你的脑袋想,用你的眼睛看,用的你 ...
- vue从入门到进阶:计算属性computed与侦听器watch(三)
计算属性computed 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example" ...
- Linux扩展分区记录
Vmware中新建的Linux虚拟机,数据盘规划太小,数据量超出磁盘大小,本文介绍如何快速扩充空间 参考:https://blog.csdn.net/lyd135364/article/details ...
- 客户化软件时代的前夜 ZT
制造业:从手工模式到大规模生产,再到大规模定制 工业革命开始以后,机器全面代替了手工工具.随着工业经济的不断发展,机器的使用导致了两种截然不同的方式.一种是手工生产基本思想的延续,另一种则是大规模生产 ...
- linux连接数过多,导致ping包丢包的问题解析
1.首先要明确,无论是tcp, udp, raw等这些都要占用socket, 那么就涉及到连接数的问题. 所以,linux连接数的问题,不仅仅是tcp连接数. 2.查看当前系统中所有的socket 连 ...