左右移时考虑移位的大小,不要溢出;
i &= i - 1; //消去i最右侧的1
i &= -i; //只保留i最右侧的1
(i & (i - 1)) == 0; //i是2的幂
i & (i - 1) == 0; //i为1 == 优先级高
迭代器的建立: STL :: iterator it;
lower_bound : 指向第一个具有给定关键字的元素 大于等于
upper_bound :指向最后一个具有给定关键字的元素之后的位置 大于
unique: 返回末尾指针
逆序迭代器首尾: a.rbegin(), a.rend();
逆序迭代器: STL :: reverse_iterator rit;
#include
memset处理一种类型的值,不能用于两种类型以上的结构体。
清空: while(!mat.empty()) mat.pop();
判断存在: a.count(x);
清空: a.clear();
遍历: 迭代器(it->first,it->second)
新建: 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
交并差:
set x1,x2,a;
形参: x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(a)
两集合并集: set_union(形参)
两集合交集: set_intersection(形参)
两集合差集: sete_difference(形参)
插入: 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) 相等
插入: a.insert(x);
清空: a.clear();
遍历: 迭代器
删除: a.erase(it); // 迭代器删除单个数值
删除: a.erase(val); //删除所有值为val的元素
//板子题hdu5349
入队: a.push();
出队: a.pop();
取队首: a.front();
判断为空: a.empty();
清空: 循环pop();
大小: a.size();
优先级最高的先出列.
priority_queue pq; //越小的整数优先级越低
priority_queue
priority_queue
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
赋值: a.first = x; a.second = y; //pair(x, y)
生成: make_pair(x, y); //pair(x, y)
不能用string[] (数组),长度不确定
截取: a = string.substr(pos, n); //截取从string第pos位开始的n个字符
从字符串输入:
istringstream ss(a);
ss >> buf;
从字符串读取: sscanf(&s[1], "%d”, &v);
查找: strchr(s, ‘,’) //第一次出现的位置,返回指针
全局变量: left和right都是多意,不能直接用