c++ vector容器

一、vector介绍

vector是一个序列容器模板类,它包含在#include<vecor>头文件中,在cppreference中std::vecotr是一个封装动态大小的序列容器,从定义中我们能知道几个关键词,“动态”,“序列”,“容器”。

1.动态代表着vector的存储是自动处理的,可以根据需要进行扩展。也就是说vector不需要在每次插入元素时重新分配内存,而只需要在额外的内存耗尽时重新分配。

我们可使用capacity()函数查询已分配的内存总量。

2.序列代表着vector中的元素是顺序存储的,那么我们不仅可以用迭代器访问,也可以使用指针去访问。也就是说我们可以像普通的数组一样,通过元素所在的位置去访问

这个元素。

3.容器代表着vector可以存放各种类型的数据,可以是像int,char,string,long这种自带的,也可以是自己定义的类型,当然也可以容器套容器,像套娃一样。

二、基本语法

1.定义vector

语法 :vector<数据类型>数组名(最大容量,初始所有元素),其中最大容量和初始所有元素是可选项,根据实际的情况来定义。

前面我们提到了vector中可以存放各种数据,我们用代码演示一下。

#include<iostream>
#include<vector>
#include<algorithm>

//这里我们自己创建了一个学生类
class Student{
public:
    std::string name;
    int age;
    std::string sex;
    int id;
};

int main(){
    //定义了三个动态数组
    //第一个数组类型是int整数型
    //第二个是Student学生类型,并且大小是20,代表着20个学生
    //第三个代表着数组大小为5,并且全部初始化为-1
    std::vector<int> Int;
    std::vector<Student> Stu(20);
    std::vector<int> v(5, -1);   

    return 0;
}

这里用的是std::vector是因为我没有使用标准命名空间也就是:using namespace std;从上面的代码我们能够更加直观的了解到,vector是如何定义的,以及它可以存放的类型是多样的

2.vector的基本函数

 在知道了如何定义之后,我们要知道该如何去使用vector,前面我们提到了可以使用capacity()来查看分配的内存。接下来我们来使用一下这个函数,顺便可以加深一下vector的太分配内存。

通过上图我们可以发现,如果我们在一开始没有给动态数组设定最大容量,那么它的值就0,反之就是我们设置的最大容量。那么问题来了,如果我们向一个设定了最大容量

的动态数组中存数据,当存储的数据超过最大容量的时候会怎么样呢?

如图:

这里我们使用了一个新的东西“push_back”,它表示向v这个数组的最后面添加一个数6。那么这里我们可以看到,v这个数组的最大容量为5,当我们向它的末尾

再添加一个元素的时候就会超过最大容量,这个时候我们使用capacity()查看发现变为了10。也就是说,当我们存储数据时如果超过了最大容量,vector会为我们

自动再分配内存。并且大小就是你之前设定的最大容量。

接下来将列举一些常用的函数

  • push_back():向数组的末尾添加一个元素
  • emplace_back():将一个就地构造的元素添加到末尾
  • pop_back():删除数组末尾的元素
  • insert():向数组中插入与元素
  • erease():删除数组中的元素
  • size():数组的大小
  • clear():清空数组
  • empty():判断数组是不是为空
  • begin(),end():一个是指向数组头的指针,一个是指向数组尾 + 1的指针
  • rbgin(),rend():也是返回的指针只不过一个是end - 1,一个是begin -1

还是那句话,实践出真知,上代码。

#include<iostream>
#include<vector>
#include<algorithm>

//这里我们自己创建了一个学生类
class Student{
public:
    std::string name;
    int age;
    std::string sex;
    int id;
};

int main(){
    //定义了三个动态数组
    //第一个数组类型是int整数型
    //第二个是Student学生类型,并且大小是20,代表着20个学生
    //第三个代表着数组大小为5,并且全部初始化为-1
    std::vector<int> Int;
    std::vector<Student> Stu(20);
    std::vector<int> v(5, -1);

    for (int i = 0; i < 10; i++){
        Int.push_back(i);//不断地向Int中添加元素
    }
    std::cout<< " 添加元素后数组的大小为" << Int.size() << std::endl;

    Int.emplace_back(5);
    auto it = Int.begin();//迭代器确定要插入的位置
    it  = Int.insert(it,7);
    if(!Int.empty())
        std::cout << "数组不为空" << std::endl;

    std::cout << "此时数组中的元素有:";
    for (int i = 0; i < Int.size(); i++){
        std::cout << Int[i] << " ";
    }
    Int.clear();
    std::cout << Int.size() << std::endl;
    return 0;
}

以上就是vector的一些基本用法。

详情请参考

https://en.cppreference.com/w/cpp/container/vector

 

posted @ 2023-11-26 16:26  clinx000  阅读(33)  评论(0编辑  收藏  举报