STL 基础

本文介绍了C++中的基础概念,包括迭代器的使用,如.end()返回最后一个元素之后的位置;pair类型的构造与值提取;map的内部有序特性及其操作;nth_element函数如何快速定位数组中第k小的元素;以及set的有序平衡树特性和常见操作。通过实例代码展示了这些概念的应用。
摘要由CSDN通过智能技术生成

引入—迭代器

  • 1,.end()返回的不是最后一个元素的位置,是最后一个元素后的空间,是不能取出的
  • 2,迭代器是指针,支持解引用和++ --操作
  • 3,参考:c++指针详解

一,pair双元组

解释:pair类型包含了两个数据值,类似于打包在一起的数据双元组

1,构造

pair<T1, T2> p;定义了一个空的pair对象p
pair<T1, T2> p(v1, v2);定义了包含初始值为v1和v2的pair对象p
make_pair(v1, v2)以v1和v2值创建的一个新的pair对象

2,提取值

p.first p.second
tips: 你也可以借助define简化提取
#define x first #define y second
p.x p.y

二,map(内部有序)

解释:map以键-值( k e y − v a l u e key-value keyvalue)存储的数据类型,键就是索引,可以理解成知道key 就可以索引到 value,是一种哈希
操作:
C++ maps是一种关联式容器,包含“关键字/值”对

 begin()         返回指向map头部的迭代器

 clear()        删除所有元素

 count()         返回指定元素出现的次数, (帮助评论区理解: 因为key值不会重复,所以只能是1 or 0)

 empty()         如果map为空则返回true

 end()           返回指向map末尾的迭代器

 equal_range()   返回特殊条目的迭代器对

 erase()         删除一个元素

 find()          查找一个元素

 get_allocator() 返回map的配置器

 insert()        插入元素

 key_comp()      返回比较元素key的函数

三、nth_element

nth_element,这个函数主要用来将数组元素中第k小的整数排出来并在数组中就位,随时调用,可谓十分实用。

函数语句:nth_element(数组名,数组名+第k小元素,数组名+元素个数)

long long n,k,a[5000010];
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    nth_element(a,a+k,a+n);
    cout<<a[k];
}
cout << "int 最大值:" << INT_MAX << '\n';
cout << "int 最小值:" << INT_MIN << '\n';
cout << "float 最大值:" << FLT_MAX << '\n';
cout << "float 最小值:" << FLT_MIN << '\n';
cout << "double 最大值:" << DBL_MAX << '\n';
cout << "double 最小值:" << DBL_MIN << '\n';
cout << "long 最大值:" << LONG_MAX << '\n';
cout << "long 最小值:" << LONG_MIN << '\n';
cout << "long long 最大值:" << LONG_LONG_MAX << '\n';
cout << "long long 最小值:" << LONG_LONG_MIN << '\n';
cout << "unsigned long long 最大值:" << ULONG_LONG_MAX << '\n';

四,set(有序平衡树)

参考资料:set 详解

顺序:内部顺序遍历为从小到大
迭代器获取: s e t < i n t > : : i t e r a t o r set<int>::iterator set<int>::iterator i t 1 , i t 2 it1,it2 it1,it2

if (!s.insert(t).second) cout << "Already Exist\n"; set中的元素不重复,insert后返回一个二元组,first表示插入后的位置,second为成功与否

set.empty() 可以直接返回集合是否为空。

set.lower_bound(x) 是返回第一个大于等于 x 的位置,

set.upper_bound(x) 是返回最后一个大于等于 x 的位置。 个人感觉这个没什么用……

set.find(x) 会返回第一个 x 的位置。如果没有 x,则会返回 set.end()。

set.erase(iterator),删除定位器 iterator 指向的值

set.erase(first,second),删除定位器 first 和 second 之间的值

set.erase(key_value),删除键值 key_value 的值

常用和技巧:假装插入某不存在元素,取得他的前一个指针为第一个小于他的,后一个为第一个大于他的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流苏贺风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值