首页 > 其他分享 >STL 容器 002 (vector 详解)

STL 容器 002 (vector 详解)

时间:2023-03-31 12:35:17浏览次数:30  
标签:sort STL 元素 back 002 vector vec 100

为什么

各方面表现都比较中等, 适用范围广

尾插很快, 查找也比较快

是什么

动态数组

特点:

  • 动态数组, 三个指针控制

  • 两倍增长

    • 扩充的方法: 不能原地扩充, 因为后面可能会有其他的东西, 必须在 其他地方开辟一块更大的内存
  • 提供[]

    • 所有的有连续空间的容器都有[]
  • iterator是class类型的

怎么样

制造

  • 两倍增长

  • //push_back() 检查剩余的空间
    //有, 继续增长
    //没有,计算
    	//开始是不是0
    		//是0 放1个
            //不是0 分配两倍的空间
        //将原来内容拷贝到新的vector   (拷贝构造)
        //原来的要删掉(析构)
        //插进最新push_back的元素
    

使用

  1. 初始化

    //重载
    vector<int>vec = {1,2,3};
    
    //拷贝
    vector<int>vec1(vec);
    vector<int>vec2(100,5);		//100个5
    vector<int>vec3(100)		//100个0
    
    //直接添加元素
    vector<int>vec{1,2,3};
    
    //复制数组
    int i[5] = {1,2,3,4,5};
    vector<int>vec(i,i+5);
    
  2. 状态查看(主要是容量)

    //返回元素个数
    vec.size();
    
    //返回扩容后最多能容纳的元素个数
    vec.max_size();
    
    //返回分配的容量
    vec.capacity();
    
    //是否为空, 为空就返回true
    vec.empty();
    
  3. 改变capacity与size

    //容量设为100
    vec.reserve(100);
    //如果capacity<size 会发生什么?
    
    //把容量改成size
    vec.shrink_to_fit();
    
    //resize少了直接砍断, 多了如果指定了数就填充指定的数,如果没有指定就默认填充0
    //底下最后输出 1 2 3 4 5 100 100 100 0 0 0 0
    for (int i=1;i<10;i++) myvector.push_back(i);
    myvector.resize(5);
    myvector.resize(8,100);
    myvector.resize(12);
    
  4. 改变 / 查看元素(不改变size)

    //[]
    vec[8] = vec[10];
    
    //at
    vec.at(10) = vec.at(9);
    
    //返回最前一个或最后一个元素, 可以作为左值
    myvector.front() -= myvector.back();
    
    //data该函数返回一个指向数组中第一个元素的指针,该指针在向量内部使用
    vec.data();
    
    • 小伙伴们应该看出来了, 上面前三个既可以作为左值; 也可以作为右值
  5. 更易型操作(改变size)

    //尾插
    vec.push_back(5);
    vec.push_emplace(5);//在末尾直接生成, 也许比push_back快一点点. 据说可以初始化对象的多个成员. 
    
    //尾删
    vec.pop_back();
    
    //插入元素
    //往迭代器指向的前面开始插入元素 (这很好理解,考虑到end,不可能是向后) , 返回第一个插入元素的位置
    vec.insert(vec.begin,2,3);	                           //在前面插入2个3
    vec.insert(vec.begin()+1,vec1.begin(),vec1.begin()+5);  //第一个填自己的迭代器, 后两个填另外一个对象的迭代器 把那个前闭后开区间插到自己元素的前面
    
    //移除元素
    //移除某个位置的元素或者某个[)区间的元素, 返回下一个元素的位置
    vec.erase(pos);
    vec.erase(beg,end);
    
    //assign
    //7个100
    vec.assign(7,100);	//如果vec里面有元素?
    //迭代器分配
    vec.assign(it,it+5);
    //类似前面初始化的时候的从数组分配
    int i[6] = {1,2,3,4,5,6};
    vec.assign(i,i+4);
    
  6. 算法类 查找/排序

    //全局find	(sort很慢,先sort再binary research不一定快)
    find();
    
    //全局sort	(自己如果有sort,就用自己的sort)
    sort();
    //vector无自己的sort. "vector.sort();"这个实现多此一举, 编译器也不让这么写
    

标签:sort,STL,元素,back,002,vector,vec,100
From: https://www.cnblogs.com/Long23/p/17275898.html

相关文章

  • unity [数学] 四元数和Vector3相乘的意义
    参考:https://answers.unity.com/questions/186252/multiply-quaternion-by-vector.html 总结:Quaternion*Vector3表示在世界坐标系下,Vector3的任意旋转; Inthequaternionworld,multiplicationisthewaytoapplytherotationtosomething  【在Quaternion下,相......
  • fastlane插件安装未用到也报错
    打包是成功了的,但是最后日志打印一堆报错,还给了几个issue链接......
  • PentestLab-web安全文件包含-EXP2
    我们打开靶机选择文件包含页面,选择“Example2”观察页面尝试更换page参数http://192.168.29.148/fileincl/example2.php?page=/etc/passwd结果如下提示目前不存在继续尝试,......
  • jsp jstl的常用标签
    out.jsp代码:<%@pagelanguage="java"pageEncoding="utf-8"%><%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%><html><head><title>page</ti......
  • 吃巧克力,容器vector、map,容器适配器 priority_queue,算法sort排序
     #include<algorithm>#include<queue>#include<map>#include<vector>#include<iostream>usingnamespacestd;structchocolate{longlonga;//价......
  • Installing Windows 7 on VirtualBox. Error status: 0xc0000225?
    Today,afterfinallytakingtheplungeintotheLinuxworld(I'mtryingtorefocusmyworktotheRailsecosystem),IinstalledVirtualBoxonLinuxMint13. Si......
  • C++ STL标准库 迭代器相关
    迭代器是什么及用法详解[迭代器是什么及用法详解C语言中文网](http://c.biancheng.net/view/6675.html)迭代器是C++STL(标准模板库)中一种非常重要的概念,它......
  • C++ STL摘记
    一、string类补充1.函数示例:(1)find和rfind函数,返回的是下标或者string::nposindex=ss.find(s1,pos,num)find从pos(包括)开始往右查找(num的作用待补充)index=s......
  • PentestLab-web安全目录穿越-EXP3
    我们打开靶机选择第三个目录穿越打开图片观察发现可以看到后缀名称已经隐藏或者是过滤了我们尝试http://192.168.20.157/dirtrav/example3.php?file=../../../../etc/passwd......
  • JSTL——JSP标准标签库
          ......