• 1.Vector(向量容器)


    一.概述

    Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度

    二.特点

    1) 指定一块如同数组一样的连续存储,但空间可以动态扩展。即它可以像数组一样操作,并且可以进行动态操作。通常体现在push_back() pop_back();

    2) 随机访问方便,它像数组一样被访问,即支持[ ] 操作符和vector.at();

    3) 节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是要明确一点vector 大多情况下并不是满存的,在未存储的区域实际是浪费的;

    4) 在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。Vector 被设计成只能在后端进行追加和删除操作,其原因是vector 内部的实现是按照顺序表的原理; 

    5) 只能在vector 的最后进行push 和pop ,不能在vector 的头进行push 和pop;

    6) 当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷贝与释放,这个操作非常消耗性能。 所以要vector 达到最优的性能,最好在创建vector 时就指定其空间大小;

    Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。

    三.常用API

    Constructors 构造函数
    Operators 对vector进行赋值或比较
    assign() 对Vector中的元素赋值
    at() 返回指定位置的元素
    back() 返回最末一个元素
    begin() 返回第一个元素的迭代器
    capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
    clear() 清空所有元素
    empty() 判断Vector是否为空(返回true时为空)
    end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)
    erase() 删除指定元素
    front() 返回第一个元素
    get_allocator() 返回vector的内存分配器
    insert() 插入元素到Vector中
    max_size() 返回Vector所能容纳元素的最大数量(上限)
    pop_back() 移除最后一个元素
    push_back() 在Vector最后添加一个元素
    rbegin() 返回Vector尾部的逆迭代器
    rend() 返回Vector起始的逆迭代器
    reserve() 设置Vector最小的元素容纳数量
    resize() 改变Vector元素数量的大小
    size() 返回Vector元素数量的大小
    swap() 交换两个Vector

    四.示例Demo

    #include <iostream>
    #include <vector>
    #include <stdlib.h>
    
    using namespace std;
    
    #pragma warning(disable:4996)
    
    struct Teacher {
        char name[20];
        int age;
    };
    
    void printfV(vector<int> &c) {
    
        int size = c.size();
    
        for (int i = 0; i < size; i++)
        {
            cout << c[i] << endl;
        }
    }
    
    void printfPTeacher(vector<Teacher *> &c) {
    
        int size = c.size();
        for (int i = 0; i < size; i++)
        {
            cout << "name is:" << c[i]->name << ", age is:" << c[i]->age << endl;
        }
    
    }
    
    
    void printfVTeacher(vector<Teacher> &c) {
    
        int size = c.size();
        for (int i = 0; i < size;i++) {
            cout << "name is: " << c[i].name << ", age is: " << c[i].age << endl;
        }
    
    }
    
    
    
    int main() {
    
        
        vector<int> v1(5);
    
        for (int i = 0; i < 5; i++)
        {
            v1[i] = i + 1;
        }
    
        for (int i = 0; i < 5; i++)
        {
            cout << v1[i] << endl;
        }
    
    
        printf("---------------------------------------
    ");
    
        vector<int> v2(20);
        v2 = v1;
    
        printfV(v2);
    
        printf("---------------------------------------
    ");
    
        // vector 会把20个元素全部初始化为0
        vector<int> v3(20);
        v3.push_back(100);
        v3.push_back(101);
    
        printfV(v3);
        printf("---------------------------------------
    ");
    
        vector<Teacher> v4(3);
        Teacher t1, t2, t3;
        t1.age = 11;
        t2.age = 22;
        t3.age = 33;
    
        strcpy(t1.name,"Tom");
        strcpy(t2.name,"Jack");
        strcpy(t3.name,"Mike");
    
        v4[0] = t1;
        v4[1] = t2;
        v4[2] = t3;
    
        printfVTeacher(v4);
    
    
        printf("---------------------------------------
    ");
    
        vector<Teacher *> v5(3);
        Teacher *p1 = (Teacher *)malloc(sizeof(Teacher));
        p1->age = 111;
        strcpy(p1->name,"Person1");
    
    
        Teacher *p2 = (Teacher *)malloc(sizeof(Teacher));
        p2->age = 222;
        strcpy(p2->name, "Person2");
    
        Teacher *p3 = (Teacher *)malloc(sizeof(Teacher));
        p3->age = 222;
        strcpy(p3->name, "Person3");
    
        
    
        v5[0] = p1;
        v5[1] = p2;
        v5[2] = p3;
    
        printfPTeacher(v5);
    
    
        
        system("pause");
        
    
        return 0;
    
    }

    运行结果:

    1
    2
    3
    4
    5
    ---------------------------------------
    1
    2
    3
    4
    5
    ---------------------------------------
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    100
    101
    ---------------------------------------
    name is: Tom, age is: 11
    name is: Jack, age is: 22
    name is: Mike, age is: 33
    ---------------------------------------
    name is:Person1, age is:111
    name is:Person2, age is:222
    name is:Person3, age is:222

  • 相关阅读:
    本人实操赚钱项目:月入10万的冷门玩法,人人可操作!
    赚钱项目:1万粉丝的公众号,年赚15万!
    AI 时代下的海量业务智能监控实践
    python 转xe7xbdx97xe5x87xbd 为中文
    python xb5xe7xc6xb1xc7xb0xd6xc3xd6xf7xbbxfa
    12.2 新特性:RMAN 自动恢复到 REDO 终点的步骤简化
    深入认识CSS的块级元素
    深入认识CSS的块级元素
    深入认识CSS的块级元素
    SAP WM TO Print Control设置里,Movement Type 的优先级更高
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/7157552.html
Copyright © 2020-2023  润新知