begin()指向容器的第一个元素,end()指向最后一个元素之后的位置。
应用:
sort(v.begin(), v.end());
first, second指向<key, value>和pair<typeA, typeB>中的两个值
应用:
auto it = hashtable.find(x);
if(it != hashtable.end()) return it->second;
不要用(left+right)/2形式,当left和right都是int,两个值的初始值都超过int限定大小的一半,那么left+right就会发生溢出,所以应该用left+(right-left)/2来防止求中值时候的溢出。
二分查找
函数的输入是两个数组,但是如果希望只对短的数组进行操作,可以用如下代码
public int[] func(int[] nums1, int[] nums2) {
if (nums1.length > nums2.length) {
return func(nums2, nums1);
}
……
将二维数组reshape
vector<vector<int>> res(r, vector<int>(c));
for(int i=0; i<m*n; i++){
res[i/c][i%c] = mat[i/n][i%n];
}
不定长的二维vector用resize()调整内vector的大小
vector<vector<int>> ret(numRows);
for (int i = 0; i < numRows; ++i) {
ret[i].resize(i + 1);
memset(a, x, l)将数组a的前l个字节都设为0【一般用于初始化】
int rows[9][9];
memset(rows,0,sizeof(rows));
unordered_map有.count(x)方法,可以返回x出现次数
unordered_set用.insert()插入元素,可用.count()查看是否已存在
关于链表的问题——双指针
倒数第k个元素、中间的元素、判断是否有环、环的长度等
详见 https://leetcode.cn/problems/linked-list-cycle/solution/yi-wen-gao-ding-chang-jian-de-lian-biao-wen-ti-h-2/
初始化二维vector
例:初始化一个50 × 50 的全0整型二维vector
vector<vector<int>> visited(50, vector<int>(50, 0))
vector的emplace方法
emplace的功能就是插入元素,但是优点在于无需对对象初始化。
例如,在插入pair(int, int)类型的数据时,使用push_back()方法必须先实例化一个pair类型的变量,而使用emplace()则可以直接用emplace(i, j)插入元素(i, j)
对char类型可以用isdigit()方法判断是否为数组
eg:
if(isdigit(s[i])
对于字母,由于大小写的ASCII码相差32,因此可以用^32进行转换
s[pos] ^= 32; // 将s[pos]转换大小写
s[pos] ^= 32; // 再换回来
直接向vector<vector<int>>中插入元素,注意有个花括号
res.push_back({a, b, c});