C++ 易错指南

1:vector 的 resize()[1]

  • 在原长度等于新长度时,不做任何事;
  • 在原长度大于新长度时,减少元素到新长度;
  • 在原长度小于新长度时,会根据指定元素值(未指定的话,根据默认值)增加元素到新长度

2:STL 重载比较函数,比较运算符时,需要严格弱序关系(反自反,非对称,传递,不可比较性的传递)
偏序在 cmp(a, b) 和 cmp(b, a) 均为真时,无法得知 a,b 是不可比较还是等价
严格弱序在 cmp(a, b) 和 cmp(b, a) 均为 false 时,可知 a, b 等价
stl 容器和算法需要判断是否等价,所以要求严格弱序;如果 stl 重载成偏序关系,那么两个不可比较的对象也会被误认为是等价的。[2][3]

参考


  1. https://en.cppreference.com/w/cpp/container/vector/resize ↩︎

  2. https://stackoverflow.org.cn/questions/18781405 ↩︎

  3. https://stackoverflow.org.cn/questions/18781405 ↩︎

posted @ 2024-08-11 23:14  YianSanren  阅读(21)  评论(0)    收藏  举报