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("---------------------------------------\n");

    vector<int> v2(20);
    v2 = v1;

    printfV(v2);

    printf("---------------------------------------\n");

    // vector 会把20个元素全部初始化为0
    vector<int> v3(20);
    v3.push_back(100);
    v3.push_back(101);

    printfV(v3);
    printf("---------------------------------------\n");

    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("---------------------------------------\n");

    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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值