首页 > 编程语言 >Java STL汇总

Java STL汇总

时间:2023-02-27 12:44:46浏览次数:40  
标签:容器 Java 函数 迭代 STL 汇总 算法 class

1) STL(Standard Template Library),即标准模板库,是一个高效的C++程序库,包含了诸多常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。

2) 从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。

3) 从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的,基于模板(template)。

STL有六大组件,但主要包含容器、算法和迭代器三个部分。

  • 容器(Containers):用来管理某类对象的集合。各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。
  • 算法(Algorithms):用来处理对象集合中的元素,各种常用的算法,如sort、find、copy、for_each。从实现的角度来看,STL算法是一种function template。
  • 迭代器(Iterators):用来在一个对象集合的元素上进行遍历动作。扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++, operator–等指针相关操作予以重载的class template。所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。
  • 仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template。
  • 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
  • 空间配置器:负责空间的配置与管理。从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte。
STL 的基本观念就是将数据和操作分离。数据由容器进行管理,操作则由算法进行,而迭代器在两者之间充当粘合剂,使任何算法都可以和任何容器交互运作。通过迭代器的协助,我们只需撰写一次算法,就可以将它应用于任意容器之上,这是因为所有容器的迭代器都提供一致的接口。

STL六大组件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。

STL的优点:
1) STL 是 C++的一部分,因此不用额外安装什么,它被内建在你的编译器之内。
2) STL 的一个重要特性是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义。迭代器在两者之间充当“粘合剂”,以使算法可以和容器交互运作。
3) 程序员可以不用思考 STL 具体的实现过程,只要能够熟练使用 STL 就 OK 了。这样他们就可以把精力放在程序开发的别的方面。
4) STL 具有高可重用性,高性能,高移植性,跨平台的优点。
5) 高可重用性:STL 中几乎所有的代码都采用了模板类和模版函数的方式实现,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。
6) 高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采用红黑树的变体实现的。
7) 高移植性:如在项目 A 上用 STL 编写的模块,可以直接移植到项目 B 上。容器和算法之间通过迭代器进行无缝连接。STL 几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。
Java STL应用实例
&去重---除去数组中重复的数字
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main{
    public static void main(String[]args)
    {
        Scanner input =new Scanner(System.in);
        int n= input.nextInt();
        int []ant=new int[n];
        for(int i=0;i<n;i++)
        {
            ant[i]= input.nextInt();
        }
        Set df=new HashSet<>();
        for(int i=0;i<n;i++)
        {
            if(!df.contains(ant[i]))
            {
                System.out.print(ant[i]+" ");
            }
            df.add(ant[i]);
        }
    }
}

 

标签:容器,Java,函数,迭代,STL,汇总,算法,class
From: https://www.cnblogs.com/liliczw2209/p/17159264.html

相关文章

  • Java应用【三】使用Jackson库进行JSON序列化和反序列化
    如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持!相关阅读:​​Java应用【......
  • Java开发中要避免的坑和一些代码优化技巧
    1:动态SQL遇到的坑,先看下面OGNL表达式的说明。Anyobjectcanbeusedwhereabooleanisrequired.OGNLinterpretsobjectsasbooleanslikethis:Iftheobjecti......
  • 成都Java培训班多少钱,让我们具体了解
    成都Java培训有很多,不同机构价格也是不同的,这个价格并非是全国统一标准,所以,我们在了解的时候必然能看到有贵有便宜的,价格的浮动,根据机构的各项成本而定,比如师资团队、课程......
  • java-idea快捷输入05
    输入PSVM:publicstaticvoidmain(String[]args){} sout:publicclassHelloWord{publicstaticvoidmain(String[]args){System.out.println();......
  • Java日期工具类编写
    Java日期工具类编写将字符串转换为对应日期 Date date = simpleDateFormat.parse(string);  将日期转换为字符串String string = simpleDateFormat.format(date);......
  • ORACEL空间管理实验9:空间管理汇总--索引和表的扫描/闪回时的块管理方式
    1.补充--关于dba_objects中的 DATA_OBJECT_ID和OBJECT_ID字段:truncatetabletest1;altertabletest1movetablespacetp2;selectobject_id,data_object_idfromdba_o......
  • JavaSE
    JavaSEJava基础篇1、解释下什么是面向对象?面向对像是一种基于面向过程的编程思想,是一种“万物皆是对象”的编程思想。任何物体都可以归为一类事物,而每个个体都是一类事......
  • 一个更适合Java初学者的轻量级开发工具:BlueJ
    Java是世界上最流行的编程语言之一,它被广泛用于从Web开发到移动应用的各种应用程序。大部分Java工程师主要是用IDEA、Eclipse为主,这两个开发工具由于有强大的能力,所以复杂......
  • java线程状态
    publicclassDemo{publicstaticvoidmain(String[]args){for(Thread.Statet:Thread.State.values()){System.out.prin......
  • RIP 路由汇总实验
     RIP路由汇总实验​​​​r1:f0/0:192.168.1.1loopback1:172.16.1.1loopback2:172.16.2.1r2:f0/0:192.168.1.2f0/1:192.168.2.1r3:f0/0:192.168.3.1f0/1:192.168......