【CSP】CPP STL速成

本文详细介绍了C++中的基本数据类型(如char、int、float、double等)、STL容器(vector、set、map、queue和pair)的用法,包括数据类型存储范围、排序、操作方法和注意事项。
摘要由CSDN通过智能技术生成
//万能头文件
#include<bits/stdc++.h>
//命名空间
using namespace std;
char1 个字节-128 到 127 或者 0 到 255
unsigned char1 个字节0 到 255
signed char1 个字节-128 到 127
int4 个字节-2147483648 到 2147483647
unsigned int4 个字节0 到 4294967295
signed int4 个字节-2147483648 到 2147483647
short int2 个字节-32768 到 32767
unsigned short int2 个字节0 到 65,535
signed short int2 个字节-32768 到 32767
long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int8 个字节0 到 18,446,744,073,709,551,615
float4 个字节精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double8 个字节双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double16 个字节长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
wchar_t2 或 4 个字节1 个宽字符

sort(begin, end, cmp):从小到大排序

STL

vector

变长数组

  • push_back(item):vector后面添加一个元素item
  • pop_back():尾端删除数据
  • size():返回vector中所含元素的个数
  • clear():一键清空vector中的所有元素
  • insert(position, item):根据指定位置在vector中插入元素,v.insert(v.begin()+2,-1)
  • erase()
    • erase(position):删除指定位置的元素
    • erase(positionBegin, positionEnd):删除一个区间的元素
#include<vector>
using namespace std;

vector<类型名> 变量名;

vector<int> name;
vector<double> name;
vector<char> name;
vector<struct node> name;
vector<vector<int> > name;//注意:> >之间要加空格

// vector数组就是一个一维数组,如果定义成vector数组的数组,那就是二维数组。
vector<int> array[SZIE]; //二维变长数组
// 在此,我送你一句话非常受用的话:低维是高维的地址。

//访问
vecntor[i];
//修改
vector[i] = value;

set

set(集合),是一个内部自动有序且不含重复元素的容器

set只能通过迭代器(iterator)访问

原本无序的元素,被插入set集合后,set内部的元素自动递增排序,并且自动去除了重复元素

注意:除了vector和string之外的STL容器都不支持*(it+i)的访问方式,因此只能按照如下方式枚举:

#include <iostream>
#include <set>
using namespace std;

int main()
{
    set<int> st;
    st.insert(5);
    st.insert(2);
    st.insert(6);
    for (set<int>::iterator it = st.begin(); it != st.end(); it++)
    {
        cout << *it << endl;
    }
    return 0;
}
  • insert(item):插入元素
  • find(value):返回的是set中value所对应的迭代器,也就是value的指针(地址)
  • erase():删除单个元素、删除一个区间内的所有元素
    • erase(it):其中it为所需要删除元素的迭代器。时间复杂度为O(1)。可以结合find()函数来使用
    • erase(value):value为所需要删除元素的值
    • erase(iteratorBegin , iteratorEnd):删除一个区间内的所有元素
  • size():获得set内元素的个数
#include<set>
using namespace std;

set<类型名> 变量名;

set<int> name;
set<double> name;
set<char> name;
set<struct node> name;
set<set<int> > name;//注意:> >之间要加空格
set<类型名> array[SIZE];

string

map

#include<map>

map<string, string> mp;
map<string, int> mp;
mao<int, node>
  • find(key):返回键为key的映射的迭代器,用find函数来定位数据出现位置,数据不存在时,返回mp.end()
  • erase:
    • erase(it):删除迭代器对应的键和值
    • erase(key):根据映射的键删除键和值
    • erase(first, last):删除左闭右开区间迭代器对应的键和值
  • size():返回映射的对数
  • clear():返回映射的对数
  • insert():插入元素,插入时要构造键值对
  • empty():如果map为空,返回true,否则返回false
  • begin():返回指向map第一个元素的迭代器(地址)
  • end():返回指向map尾部的迭代器(最后一个元素的下一个地址)
  • rbegin():返回指向map最后一个元素的迭代器(地址)
  • rend():返回指向map第一个元素前面(上一个)的逆向迭代器(地址)
  • count():查看元素是否存在,因为map中键是唯一的,所以存在返回1,不存在返回0
  • lower_bound():返回一个迭代器,指向键值>= key的第一个元素
  • upper_bound():返回一个迭代器,指向键值> key的第一个元素

注意:
查找元素是否存在时,可以使用
mp.find()mp.count()mp[key]
但是第三种情况,如果不存在对应的key时,会自动创建一个键值对(产生一个额外的键值对空间)
所以为了不增加额外的空间负担,最好使用前两种方法

添加元素:

mp["学习"] = "看书";
mp.insert(make_pair("vegetable", "蔬菜"));
mp.insert(pair<string, string>("fruit", "水果"));

访问元素:

//迭代器访问
map<string, string>::iterator it;
for(it=mp.begin(); it!=mp.end(); it++) {
    cout << it->first << it->second << endl;
}

//对指定单个元素访问
map<char, int>::iterator it = mp.find('a');
cout << it->first << " " << it->second << endl;

queue

pair

pair只含有两个元素,可以看作是只有两个元素的结构体

#include<utility>

//初始化定义
pair<string, int> p("111", 1); //带初始值
pair<string, int> p; //不带初始值

//赋值
p = {"wang", 18};
p = make_pair("wang", 18);
p = pair<string, int>("wang", 18);


pair<int, int> p[20];
//访问
for(int i=0; i<20; i++) {
    cout << p[i].first << " " << p[i].second << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值