C++———STL容器个人理解(vector、queue、stack)

文章目录

  • 什么是容器
  • vector
    • 代码讲解及实现
      • 声明操作
      • size
      • empty
      • clear
      • 迭代器
      • front
      • back
      • push_back
      • pop_back
      • begin/end
      • 代码测试
  • queue
    • 代码实现及讲解
      • 循环队列queue
      • 声明
      • push
      • pop
      • front
      • back
      • 初始化
      • 结构体定义
      • 优先队列priority_queue
      • push
      • pop
      • top
      • 测试结果
  • stack
      • 声明
      • push/back
    • 代码实现及讲解

什么是容器

在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。

vector

vector是变长数组,支持随机访问,不支持在任意位置O(1)插入。为保证效率,只在队尾进行插入和删除操作(当然,这个操作的时间复杂度为O(1))。也可以在队头插入,不过时间复杂度为O(n)。

代码讲解及实现

声明操作

#include 
vector<int> a;

此时的a数组是可以动态变化的。

size

size函数返回vector的实际长度(包含的元素个数),时间复杂度为O(1)

a.size();

empty

empty函数返回一个bool类型,表明vector是否为空,时间复杂度为O(1)。

a.empty();

clear

clear函数把vector数组清空。

a.clear();

迭代器

迭代器(iterator)是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址。

vector<int>::iterator it;
it;//相当于a[0]

front

front函数用以实现返回vector数组第一个元素,时间复杂度为O(1)

cout<<a.front()<<endl;

back

back函数用以实现返回vector数组的最后一个元素,时间复杂度为O(1)

cout<<a.back()<<endl;
//相当于返回a[a.size()-1]

push_back

push_back函数用来插入元素至队尾,时间复杂度为O(1)。

a.push_back(1);
//把1插入队尾

pop_back

pop_back函数用来实现删除队尾元素,时间复杂度为O(1)。

a.pop_back();

begin/end

begin函数返回的是vector数组的第一个迭代器,而end函数是返回最后一个元素的下一个迭代器(左开右闭)。所以直接访问a.end()是会越界的。

一般用于遍历数组,而遍历数组有多种方式

vector<int> d({
   123})
for(vector<int>::iterator it=d.begin();it!=d.end();it++)cout<<*it
<<' ';
cout<<endl

你可能感兴趣的:(C++学习笔记,c++,学习,笔记)