yaron
0.01D
V2EX  ›  问与答

请教大佬一个 c++值初始化的问题

  •  
  •   yaron · Jul 15, 2022 · 2094 views
    This topic created in 1582 days ago, the information mentioned may be changed or developed.

    使用无序 map 来记录字符串中字符的个数

    unordered_map<char, int> strmap;
    for (int i = 0; i < s.size(); i++)
    {
      strmap[s[i]]++;
    }
    

    以上的写法是规范的吗?

    strmap[s[i]]++ 看起来好像是先插入,后初始化为 0 ,再进行+1 操作。

    但像int a; 这种,a 的值不是未知的吗

    8 replies  •  2022-07-15 17:09:24 +08:00
    Jooooooooo
    Jooooooooo
    Jul 15, 2022
    1
    若是写法让人理解不了, 就换一种更清晰的写法.
    MegrezZhu
    MegrezZhu
    Jul 15, 2022
    3
    上面这个链接跳转有些问题…记得把后面的[]一起带上
    freemon
    freemon
    Jul 15, 2022❤️1
    4
    unorderde_map 元素如果是 int 类型,默认值是 0 ,这个依赖于 stl 的实现,int a 这种也不一定是未知的值,依赖不同编译器的实现,有些编译器会将这种设置为 0 ,有些则默认为寄存器中上次预留的值
    404neko
    404neko
    Jul 15, 2022❤️1
    5
    unordered_map 是模板类
    int 是基础数据类型

    类声明的时候会调用默认构造函数
    yaron
    yaron
    OP
    Jul 15, 2022
    6
    解题:
    A call to this function is equivalent to:
    (*((this->insert(make_pair(k,mapped_type()))).first)).second

    strmap[s[i]]++ 相当于:
    strmap.insert(make_pair(s[i], int()))
    而:
    int() 等于 (int)0
    daC
    daC
    Jul 15, 2022 via Android❤️1
    7
    T() 的写法是值初始化,对于 int ,也就是零初始化
    结合 2L 的链接,你描述的行为是标准的
    L4Linux
    L4Linux
    Jul 15, 2022 via Android
    8
    int 转 char ,signed 与 unsigned 比较。被打一顿不过分。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   942 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 22:00 · PVG 06:00 · LAX 14:00 · JFK 17:00
    ♥ Do have faith in what you're doing.