zoukankan      html  css  js  c++  java
  • 关于vector.size()的一些常见错误总结

    1. 问题引入

    通过查看[https://www.cplusplus.com/reference/vector/vector/] 的vector.size()说明,即

    member type definition notes
    size_type an unsigned integral type that can represent any non-negative value of difference_type usually the same as size_t
    从表中可以知道:vector.size()的返回值是vector动态数组容器的尺寸大小,也就是内部元素个数。
    但是我们容易忽略的是返回值的数据结构是 unsigned int,而不是int,这就会引发一些问题。

    2. 常见错误

    2.1 循环遍历时的警告

    当我们利用for循环遍历vector的元素时,需要注意的是迭代参数最好设置为unsigned int,而不是int,即
    for (unsigned int i = 1; i < nums.size(); i++)
    否则会引发警告:
    C4018 “<”: 有符号/无符号不匹配

    2.2 判断时的错误

    例如下面这段程序:

    int i = 1;
    vector<int> nums = { 3,2,1 };
    int ans = 0;
    if (i - nums.size() < 0)
    	ans = 1;
    return ans;
    

    我们想要ans返回的1,但时实际输出为0,通过调试我们发现,if语句无法进入,这就是因为i为int类型,而nums.size()为unsigned int类型,两者做运算,会强制更改为unsigned int类型,也就导致i - nums.size() > 0,无法进入if语句,此时改进方法有两种:

    • 方法一:强制转化为int类型,即if ((int)(i - nums.size()) < 0)或者if (i - (int)nums.size() < 0)
    • 方法二:将nums.size()移动到比较符号的一边,即if (i < nums.size())
    作者:云梦士
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Codeforces 492E Vanya and Field
    Codeforces 492D Vanya and Computer Game
    HDU 5125 magic balls(线段树+DP)
    HDU 5124 lines
    Codeforces 488D Strip (set+DP)
    FZU 2079 最大获利(线段树+DP)
    Codeforces 490D Chocolate
    Codeforces 490C Hacking Cypher
    HDU
    HDU
  • 原文地址:https://www.cnblogs.com/yunmeng-shi/p/15009500.html
Copyright © 2011-2022 走看看