首页 > 其他分享 >STL 与 库函数

STL 与 库函数

时间:2023-12-14 12:12:59浏览次数:27  
标签:std end STL 元素 queue vector vec 库函数

STL 与 库函数

1. Vector 的了解

std::vector: 内存连续的,可以动态分配内存,很多时候我们不能提前开好那么大的空间,(例如预处理 1 ~ n 中 所有数的约数),我们就需要得到可变长度数组,这就是vector。 vector还能够实现线性复杂度的插入删除,常数复杂度的随机访问。
std::vector 重载了比较运算符和赋值运算符,这使得我们可以方便的判断两个容器是否相等,此外std::vector还重载了赋值运算符,使得数组拷贝更加方便。
std::vector 重载了 = 运算符,所以我们方便的初始化,此外从C++11起,std::vector还支持列表初始化。例如: std::vector data{1,2,3};

2. vector 常用函数

std::vector<int> v; 
v.empty();  // 返回一个bool 值,即v.begin() == v.end(),true 为 空,反之为 非空。    
v.size();  // 返回容器长度(元素数量)    
v.push_back(x); //  在末尾插入一个元素。均摊复杂度为常数。    
v.pop_back();// 删除末尾元素      
v.clear(); // 清空std::vector    
v.erase(~~); // 删除某个迭代器 或区间内元素。     

关于 v.erase() 的例子:
例如此时需要对std::vector中的元素去重,你可以这样写

std::sort(v.begin(),v.end());
v.erase(std::unique(v.begin(),v.end()),v.end());  // 将重复的移动至末尾,并将其删除。  

vector 中 使用 pair 的例子:
例如需要对已经存入的坐标按照x值升序排列,你可以这样写

vector< pair<int,int> > vec;
vec.push_back({u,v});
bool cmp(pair<int,int> a, pair<int,int> b)
{
    if(a.first == b.first) retun a.second < b.second;
    return a.first < b.first;
}
sort(vec.begin(),vec.end(),cmp);
for(auto it = vec.begin() ; it = vec.end(); it ++)
{
    cout<<it->first << " " <<it->second;
    printf("\n");
}

3.Stack(栈)

std::stack 是一种后进先出(LIFO)的容器,仅支持查询或删除最后一个加入的元素(即栈顶元素),不支持随机访问,且为了保证数据的严格有序性,不支持迭代器。
常用函数:

std::stack<int> stk;
stk.empty();  // 返回一个bool 值,判断栈是否为空,true 为 空,反之为 非空。
q.push(x); // 向栈顶加入元素x。
stk.top(); // 返回 栈顶元素    
stk.pop(); // 栈顶元素出栈 。     

4.queue (队列)

std::queue 是一个队列容器,满足FIFO(先入先出) 的原则。
常用函数:

std::queue<int> q;
q.empty();  // 返回一个bool 值,true 为 空,反之为 非空。
q.push(x); // 向队尾插入元素x。    
q.front(); // 返回队首元素。
q.back(); // 返回队尾元素。
q.pop(); // 队首元素出队。
q.size(); // 返回一个int 类型的数值,表示队列中元素的个数。

5.priority_queue

std::priority_queue 是一个优先队列。顾名思义,也是一个队列容器,它满足std::queue 的所有特性,不同的是,优先队列会将所有的元素按照Compare 排序。
定义时与std::queue 类似,都需要指明数据类型,优先队列还需要指明Compare的内容,但不指明时默认为std::greater,表示从队首到队尾元素依次为降序排序。
若数据类型是结构体 node
由于编译器无法默认的比较两个结构体的大小关系,于是我们需要对小于号 < 进行重载,使之能够对两个结构体变量进行比较:

struct node{
    int x; int y;
    bool operator < (const node &a) const
    {
        return x > a.x;
    }
};
std::priority_queue<node> q;

常用函数:
与std::queue基本一致,主要的不同点在于std::priority_queue中,q.top() 表示队首元素。

标签:std,end,STL,元素,queue,vector,vec,库函数
From: https://www.cnblogs.com/Elgina/p/17900925.html

相关文章

  • .net中加解密用BouncyCastle就够了,支持常用的各种加密解密算法
    BouncyCastle是一个流行的Java加解密库,也支持在.NET平台上使用。下面是BouncyCastle在.NET下使用的一些常见功能,包括AES、RSA、MD5、SHA1、DES、SHA256、SHA384、SHA512等。在开始之前,请确保你已经将BouncyCastle的NuGet包安装到你的项目中。你可以通过NuGet......
  • 用元编程来判断STL类型
      在此之前,先来回顾元编程当中的一个重要概念。template<typename_Tp,_Tp__v>structintegral_constant{staticconstexpr_Tpvalue=__v;typedef_Tpvalue_type;typedefintegral_constant<......
  • 关于STL的大整理
    set集合,用于去重和排序。用法set<储存的类型>容器名;常用函数//时间复杂度O(logn)insert()//插入元素,自动排序//示例s.insert(3);s.insert(1);s.insert(2);s.insert(4);s.insert(1);s.insert(5);//输出12345find()//查找一个数,返回迭代器count()//返回......
  • STM32学习笔记_点灯(基于库函数方式)
    1.使能外设时钟输入:RCC_APB2PeriphClockCmd函数,查看函数定义,根据函数定义填写参数:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);2.配置端口模式输入函数GPIO_Init,跳转到函数定义,查看函数定义得知函数体的第二个参数是结构体,先定义结构体并且填写结构体的各个参数,然后填写......
  • STL用法
    1.vector数组从尾部插入,尾部删除。相关用法代码如下:1//1.尾部插入及删除数字2vec2.push_back(1);//尾部插入元素3vec2.pop_back()//删除尾部元素45//2.使用下标访问元素,6cout<<vec2[0]<<endl;//记住下标是从0开始的......
  • 2023.12.5 stl list容器
    3.7.1list基本概念 功能:将数据进行链式存储链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成:链表由一系列结点组成 结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域 STL中的链表......
  • 2023.12.4学习笔记(stm32跑马灯实验——库函数)
     STM32f4有七组引脚(GPIOx),每组引脚有16个IO口,每组由十个寄存器控制。   查找STM32引脚的功能,可以在STM32F04ZGT6文件50页左右查询,此文件所在的位置为硬件资料、芯片资料文件夹里。跑马灯实验思路步骤:1:使能时钟,调用函数RCC_AHB1PeriphClockCmd();       ......
  • stl容器
    3.5stack容器3.5.1stack基本概念 概念:stack是一种先进后出(FirstInLastOut,FILO)的数据结构,它只有一个出口   栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为---入栈push栈中弹出数据称为---出栈pop 生活中的栈:   ......
  • stl中迭代器的删除
    Z1584.noip题海战Description某校举行了k场集训,集训有两种方式:比赛和训练对于每场比赛,他要保证所出的所有试题,对于所有学生来说,都是从来没有做过的而对于每场训练,他要保证所出的所有题都被每一个参赛学生做过。FormatInput第一行2个正整数n和m,表示学生数和试题总数第2~n+1行......
  • 在OI类竞赛中经常使用的C++STL模板类
    vector变长数组vector的初始化vector<int>a;//定义一个空的vector,且元素类型为intvector<int>a(n);//定义一个长度为n,元素类型为int的vector,且每个元素都是0vector<int>a(n,x);//定义一个长度为n,元素类型为int,且每个元素都是x的vectorvector<int>b(a);//定义一......