个人学习笔记

位运算

左右移时考虑移位的大小,不要溢出;
i &= i - 1; //消去i最右侧的1
i &= -i; //只保留i最右侧的1
(i & (i - 1)) == 0; //i是2的幂
i & (i - 1) == 0; //i为1 == 优先级高

STL

迭代器的建立: STL :: iterator it;
lower_bound : 指向第一个具有给定关键字的元素 大于等于
upper_bound :指向最后一个具有给定关键字的元素之后的位置 大于
unique: 返回末尾指针
逆序迭代器首尾: a.rbegin(), a.rend();
逆序迭代器: STL :: reverse_iterator rit;

memset

#include <memory.h>
memset处理一种类型的值,不能用于两种类型以上的结构体。

stack

清空: while(!mat.empty()) mat.pop();

map

判断存在: a.count(x);
清空: a.clear();
遍历: 迭代器(it->first,it->second)

vector

新建: a(n, sta); // n 大小 sta 状态
添加: a.push_back(x); //插入尾部
删除: a.pop_back(); //删除尾部
取尾部: a.back();
清空: a.clear();
查找元素: find(a.begin(); a.end(); val) //找到返回地址,未找到返回a.end()
vector <pair <int, int> > 插入pair: make_pair(a, b)
交并差:
set x1,x2,a;
形参: x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(a)
两集合并集: set_union(形参)
两集合交集: set_intersection(形参)
两集合差集: sete_difference(形参)

set

插入: a.insert(x);
删除: a.erase(x);
删除: a.erase(*迭代器);
清空: a.clear();
大小: a.size();
遍历: 迭代器
set x1,x2,a;
形参: x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(a)
两集合并集: set_union(形参)
两集合交集: set_intersection(形参)
两集合差集: sete_difference(形参)
自定义结构体判重: 当且仅当!(a > b) && !(b > a) 相等

multiset (平衡树)

插入: a.insert(x);
清空: a.clear();
遍历: 迭代器
删除: a.erase(it); // 迭代器删除单个数值
删除: a.erase(val); //删除所有值为val的元素
//板子题hdu5349

queue

入队: a.push();
出队: a.pop();
取队首: a.front();
判断为空: a.empty();
清空: 循环pop();
大小: a.size();

priority_queue (堆)

优先级最高的先出列.
priority_queue pq; //越小的整数优先级越低
priority_queue <int, vector , greater > pq; //越小的整数优先级越大
priority_queue <int, vector , cmp> pq //自定义优先级判断

struct cmp{
bool operator () (const int a, const int b) const
 //a的优先级比b小的时候返回true
{	
return a % 10 > b % 10;
}
};

pair 排序

struct cmp{
        template<typename T, typename U>
        bool operator()(T const& left, U const &right) {
            return  left.first == right.first ? left.second > right.second : left.first > right.first;
        }
};//从小到大

入队: pq.push(x);
出队: pq.pop();
取队首: pq,top();
大小: pq.size();

pair

pair <string, int> a;
赋值: a.first = x; a.second = y; //pair(x, y)
生成: make_pair(x, y); //pair(x, y)

string

不能用string[] (数组),长度不确定
截取: a = string.substr(pos, n); //截取从string第pos位开始的n个字符
从字符串输入:
istringstream ss(a);
ss >> buf;

char

从字符串读取: sscanf(&s[1], "%d”, &v);
查找: strchr(s, ‘,’) //第一次出现的位置,返回指针

全局变量: left和right都是多意,不能直接用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值