容器

C++ STL介绍——简介

守給你的承諾、 提交于 2020-02-22 22:48:07
目录 1、什么是STL 2、STL中六大组件 2.1 容器(Container) 2.2 迭代器(Iterator) 2.3 算法(Algorithm) 2.4 仿函数(Functor) 2.5 适配器(Adaptor) 3、其他部分链接 @目录 1、什么是STL STL Standard Template Library ,即标准模板库,是一个具有工业强度的,高效的C++ 程序库。它被容纳于C++ 标准程序库 C++ Standard Library 中,是 ANSI/ISO C++ 标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。 STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的 sort() 函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组; STL另一个重要特性是它不是面向对象的。为了具有足够通用性,STL主要依赖于模板而不是封装,继承和虚函数(多态性)——OOP的三个要素。你在STL中找不到任何明显的类继承关系。这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。另外,由于STL是基于模板,内联函数的使用使得生成的代码短小高效;

STL容器迭代过程中删除元素技巧

本秂侑毒 提交于 2020-02-22 22:32:56
1. 连续内存序列容器 (vector,string,deque) 序列容器的 erase 方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。 vector<int> c; for(vector<int>::iterator it = c.begin(); it != c.end();) { if(need_delete()) it = c.erase(it); else ++it; } 2. 关联容器 (set,multiset,map,multimap) 关联容器的 erase 方法没有返回值,被删除的迭代器失效,所以删除前必须确保能得到下一个迭代器,可以用 “ 后置递增迭代器 ” 技术。 map<int,int> m; for(map<int,int>::iterator it = m.begin(); it != m.end();) { if(need_delete()) m.erase(it++); else ++it; } m.erase 得到 it 的一个副本,在 erase 真正开始之前 it 已经递增了。 所以 erase 得到了当前的迭代器,在 erase 内部工作开始之前 it 已经 ++ 了,正好满足我们的需要。 3. 非连续内存序列容器 (list) 只所以单独列出来是因为以上两种方法对 list 都适用

迭代器的使用及问题

◇◆丶佛笑我妖孽 提交于 2020-02-22 22:06:10
迭代器虽然拥有指针的功能,但不是 指针!其最重要的便是内容提纲和成员访问。 迭代器 是一种类似指针的对象,其重载了指针->,*,++ --等操作符,其实质是封装了原生指针,为了为容器提供统一的接口, 一、声明 容器类型<typpe,.>::iterator 迭代器名称 例如:vector<int>::iterator iter; 二、迭代器失效 向容器中添加或者删除数据都有可能导致迭代器失效 (1)顺序容器(vector,deque) 顺序容器即使用了连续分配的内存,在向容器中添加或者删除数据时,都将使当前插入或者删除后面的元素向前或者向后移动一个位置,存在指向 已经发生移动的 数据 的迭代器将失效,使用以及失效的迭代器 自增 或者是 操作 直接使程序崩溃!使不得使不得啊! 在使用Vector和deque的erase()时,返回的是当前删除节点的下一个迭代器,故使用for循环删除时,应该明确指出迭代器ite接收下一个iterator。 (2)关联容器 关联容器在删除或者添加元素时,将使指向当前元素迭代器失效。对于map的erase()函数,其删除后返回下一个元素的迭代器,且被删除元素的后面的迭代器依然有效。 注意:end()函数指向的是容器最后一个元素的后一个位置,如果直接取值将会报错,使程序崩溃! 解决方案: 在循环迭代删除的时候可以使用如下方法,先将参数ite传给erase

STL简介

送分小仙女□ 提交于 2020-02-22 21:49:35
1、简介 (1)STL 是 C++ 标准程序库的核心。 STL 内所有组件都由模板构成,其元素可以是任意类别。 (2)STL译为标准模板库。STL从根本上讲是“容器”的集合,也是组件的集合。 容器包括:list、vector、set、map等,组件包括迭代器、算法等。 (3) STL的算法是标准算法 ,可以把STL已经定义的算法应用在容器的对象上。 2、组成构件 STL 的组件中最主要的是容器、迭代器、算法和仿函数。 (1)容器:用来管理某类对象的集合 (2)迭代器:用来在一个对象群集的元素上进行遍历动作 (3)算法:用来处理群集内的元素 3、基本结构 STL 是 C++ 通用库,由容器、算法、迭代器、仿函数和内存配置器组成。 (1)容器 Vector<T> ,是一种向量 List<T> ,是一种双向链表容器 Queue<T>,是一种队列容器 Stack<T>,是一种栈容器 Deque<T>,是双端队列容器 Set<T> ,是一种集合容器 Map<key,val> ,是一种关联数组容器 (2)算法 STL提供了非常多的数据结构算法。 这些算法在命名空间std的范围内定义,通过包含头文件<algorithm>来获得使用权。 STL中所有的算法都是基于模板实现的。 (3)迭代器 通俗的讲,迭代器就是指示器,能够使程序反复对数据进行访问,为访问数据提供了通用的接口,类似于C++的指针

css尺寸常用样式

爷,独闯天下 提交于 2020-02-22 15:49:23
white-space:nowrap; 控制容器内的文本,不允许换行。 min-width:最小宽度   当内容宽度小于最小宽度时,容器的宽度等于最小宽度。   当内容宽度大于最小宽度时,容器的宽度等于内容宽度。 max-width:最大宽度   当内容宽度小于最大宽度时,容器的宽度等于内容宽度。   当内容宽度大于最大宽度时,容器的宽度等于最大宽度,并且内容溢出。 height:当内容高度超出height指定高度时,内容溢出。 min-height:最小高度 特性与最小宽度一致 max-height:最大高度 特点等同于最大宽度 来源: https://www.cnblogs.com/crazier/p/12345439.html

Docker容器互访三种方式

*爱你&永不变心* 提交于 2020-02-22 14:49:41
一、概述 docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢。 下面介绍三种方法来解决容器互访问题,分别是: 虚拟ip访问 link 创建bridge网络 本文以一台centos 7.6服务器来演示。 二、虚拟ip访问 安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间可以根据ip互相访问。 运行一个centos镜像, 查看ip地址得到:172.17.0.2 # docker run -it alpine /bin/sh / # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:266 (266.0 B) TX bytes:0 (0

docker容器的底层技术

半腔热情 提交于 2020-02-22 13:43:07
cgroup(实现资源限制) cgroup全称control group。linux操作系统通过cgroup可以设置进程使用CPU、内存和IO资源的限制。--cpu-shares、-m、--device-write-bps实际上就是在配置cgroup。 在/sys/fs/cgroup/cpu/docker目录中,linux会为每个容器创建一个cgroup目录,以容器的长ID命名的目录中包含所有与cpu相关的cgroup配置,文件cpu.shares保存的就是--cpu-shares的配置,同样的,/sys/fs/cgroup/memory/docker和/sys/fs/cgroup/blkio/docker中保存的就是内存以及block io的cgroup配置 namespace(实现资源隔离) 在每个容器中,都有文件系统、网卡等资源,这些资源看上去都是容器自己的。拿容器来说,每个容器都会认为自己有一块独立的网卡。即使host上只有一块物理网卡。这种方式非常好,它使得容器更像一个独立的计算机 linux实现这种方式的技术是namespace。namespace管理着host中全局唯一的资源。可以让每个容器都觉得只有自己在使用它。换句话说,namespace实现了容器间资源的隔离 Linux使用了6种namespace,分别对应6种资源:mount、uts、ipc、pid

docker入门(三):容器数据卷与DockerFile脚本,使用阿里云镜像仓库

亡梦爱人 提交于 2020-02-22 12:00:26
一. 容器数据卷 用于数据保存和持久化,简单的理解,就是容器和主机共享的一个公共硬盘,举个例子,原本tomcat部署应用,或者查看日志还需要进入容器,现在将日志文件夹和部署文件夹拿出来挂载到主机,就可以在不进入容器的情况下查看日志或者部署项目 1. 直接构建容器数据卷 #直接把容器内文件夹挂在到主机文件夹上 docker run -it -v /宿主机绝对路径:/容器内目录 镜像名 #在主机根目录下创建MyDockerCentos文件夹,在centos容器中创建MyDockerCentos01文件夹 #挂载成功后,MyDockerCentos01文件夹内容即可共享在MyDockerCentos文件夹内的内容 #添加ro则该文件夹为只读 docker run -it -v /MyDockerCentos:/MyDockerCentos01 or centos #通过容器元数据查看挂载情况 docker inspect #在json中可以看到此段文字 ... "Mounts": [ { "Type": "bind", "Source": "/MyDockerCentos", #此为主机挂载文件夹路径 "Destination": "/MyDockerCentos01", #此为容器挂载文件夹路径 "Mode": "", "RW": true, #若为只读,则"RW"为false

SSM框架归纳学习Spring篇

怎甘沉沦 提交于 2020-02-22 06:58:46
Spring是什么? Spring是一个分层,轻量级兼容性高的一站式(一条龙服务)开源框架。 分层:表现层SpringMVC,业务逻辑层(Dao层)管理事务、记录日志,持久层(数据访问 层)MyBatis。 轻量级: 高内聚低耦合 低耦合· 对象得 创建 和依赖关系的 维护 都交给Spring容器管 理。(IOC控制反转) 兼容性高:面向切面开发(AOP)。 Spring的核心 IOC控制反转 IOC是什么? IOC是一种理论:借助于“第三方容器”实现具有依赖关系的对象之间的解耦( IOC是一种理论思想 ,它的存在形式是第三方容器,被 命名为IOC容器 ) IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第 三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系 统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发 挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。 为什么叫IOC控制反转? 软件系统在没有引入IOC容器之前,如图所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B, 控制权都在 A 手上 。 软件系统在引入IOC容器之后

回顾 | Kubernetes SIG-Cloud-Provider-Alibaba 首次网研会(含 PPT 下载)

久未见 提交于 2020-02-22 06:34:20
作者 | 汤志敏、谢瑶瑶 会议完整视频回顾: https://www.bilibili.com/video/av88668762 2 月 12 日,阿里云和 CNCF 联合举办了线上研讨会,首次完整介绍了阿里云对 Kubernetes 社区的布局,包括了 10 个类别,20 多个开源项目,提供了完整的 Kubernetes 生命周期管理。本文汇集了此次会议完整视频回顾及资料下载,并整理了会议上未能及时回答的问题,希望能够对大家有所帮助~ 关注“阿里巴巴云原生”公众号,后台回复 “会议” 即可下载 PPT。 什么是 SIG Cloud Provider 随着时间的发展,越来越多的企业在生产环境使用 Kubernetes。Kubernetes 被广为接受,离不开其良好的设计和繁荣的社区。目前围绕着 Kubernetes 已经有 20 个左右的兴趣小组(SIG),SIG Cloud Provider 则是 Kubernetes 的重要兴趣小组之一,致力于推动所有云厂商以标准的能力提供 Kubernetes 服务。 SIG-Cloud-Provider-Alibaba 是 SIG Cloud Provider 在国内唯一的子项目。 Cloud Provider SIG 是 Kubernetes 的云厂商兴趣小组,致力于让 Kubernetes 的生态系统往厂商中立的方向演进