c++部分小技巧

  • 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});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值