以下为《第9讲 位运算与常用库函数》的无排版文字预览,完整内容请下载
第九章 位运算与常用库函数
C++帮我们实现好了很多有用的函数,我们要避免重复造轮子。
——闫学灿
位运算
& 与
| 或
~ 非
^ 异或
>> 右移
> k & 1
lowbit(x) = x & -x,返回x的最后一位1
常用库函数、
reverse 翻转
翻转一个vector:
reverse(a.begin(), a.end());
翻转一个数组,元素存放在下标1~n:
reverse(a + 1, a + 1 + n);
unique 去重
返回去重之后的尾迭代器(或指针),仍然为前闭后开,即这个迭代器是去重之后末尾元素的下一个位置。该函数常用于离散化,利用迭代器(或指针)的减法,可计算出去重后的元素个数。
把一个vector去重:
int m = unique(a.begin(), a.end()) – a.begin( 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 < b.x || a.x == b.x && a.y < b.y;
}
sort(a.begin(), a.end());
lower_bound/upper_bound 二分
lower_bound 的第三个参数传入一个元素x,在两个迭代器(指针)指定的部分上执行二分查找,返回指向第一个大于等于x的元素的位置的迭代器(指针)。
upper_bound 的用法和lower_bound大致相同,唯一的区别是查找第一个大于x的元素。当然,两个迭代器(指针)指定的部分应该是提前排好序的。
在有序int数组(元素存放在下标1~n)中查找大于等于x的最小整数的下标:
int I = lower_bound(a + 1, a + 1 + n,. x) – a;
在有序vector 中查找小于等于x的最大整数(假设一定存在):
int y = *--upper_bound(a.begin(), a.end(), x);
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《第9讲 位运算与常用库函数》的无排版文字预览,完整内容请下载
第9讲 位运算与常用库函数由用户“阳光照射角落5”分享发布,转载请注明出处