zoukankan      html  css  js  c++  java
  • stl概述

    stl概述

    stl标准模板库,基于C++(standard template library)

    无需了解stl原理,便可以享受数据结构和数据算法所带来的一些特性

    容器 vertor deque list map (set multiset multimap)

    分为两类:

    1.序列式容器 是可序群集

    每个元素的都有固定的位置,元素的位置取决于插入的时机和地点,和元素的值无关(vector list deque)

    元素进入该容器的开销小

    2.关系式容器 是已序群集

    元素的位置取决于元素的值和特定的排序规律(set map multiset multimap)

    元素进入该容器的开销大

    对比

    元素进入容器,序列式优于关系式

    搜索元素时,关系式优于序列式

    二分查找(折半查找)

    速度最快

    STL容器必须满足以下条件:

    1.容器进行元素的插入操作,内部实现的是拷贝操作,因此STL容器内的每一个元素都必须能够被拷贝

    2.所有元素形成次序,多次遍历每个元素时的次序总是相同的

    3.一般而言,各项操作并非绝对安全

    通用性函数

    size empty 关系判断 swap insert erase clear pushback popback

    迭代器:可以遍历stl容器内全部或部分元素的一个对象,对象行为理解为指针(智能指针)

    可以把他当成一个函数 一个指针

    vector

    他是一个容器 动态数组(c++标准 并没有要求必须用动态数组来实现vector,只岁规定了相应的条件和操作复杂度) 栈 链式栈(链表) 顺序栈(数组)

    只要知道位置,很方便直接存取这个位置的元素

    在尾部进行插入和删除时,性能是比较高,在前端和中端进行插入和删除,性能相对比较差,要做大量移位

    容器的大小可以变化,如果大小发送生变化,可能会导致内存重新分配,重新分配可能会导致内存泄露或内存溢出。

    c语言是编译性语言

    java是解释性语言

    下面是vector的增删查改

     1     vector<int> v;
     2 
     3     for (int i = 0; i < 10; i++){
     4         v.push_back(i + 1);//分配空间的事情,赋值的事情
     5         for (int i = 0; i < 10; i++){
     6             printf("%d
    ", v[i]);
     7         }
     8     }
     9     vector<int>::iterator vit = v.begin();//vector的迭代器
    10 
    11     v.insert(vit + 2, 100);//索引到第二个数的位置插入100
    12     vit = vit + 3;//vit索引到第三位
    13     v.erase(vit);//删除第三位上的数数据
    14 
    15     for (vit = v.begin(); vit != v.end(); ++vit)
    16         printf("%d
    ", *vit);//从头到尾打印出容器里的数据
  • 相关阅读:
    单链表相关笔试题:单链表逆转,约瑟夫环等
    cURL安装和使用笔记
    WSDL中文版——详解
    [c++语法]类
    spark源码解析之基本概念
    apache-spark导入eclipse环境
    zookeeper应用实例
    spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
    Let's do our own full blown HTTP server with Netty--转载
    1号店11.11:从应用架构落地点谈高可用高并发高性能--转载
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11402657.html
Copyright © 2011-2022 走看看