【问题标题】:count specific number of elements计算特定数量的元素
【发布时间】:2011-05-11 17:21:04
【问题描述】:

例如,如果我有一个包含 5 个输入元素的数组,如果该值已经在变量中建立,我将如何计算该值被输入的次数。

INPUT:
4
4
4
1
2

如果click 被定义为4,那么我将如何计算数组中使用click 的次数? 希望这是有道理的。 谢谢

【问题讨论】:

    标签: c++ arrays count


    【解决方案1】:

    由于您已将问题标记为 C++,因此这是使用 STL 的正确 C++ 答案。

    int num = std::count(&array[0], &array[5], click);
    

    http://en.cppreference.com/w/cpp/algorithm/count

    【讨论】:

    • 嗯。 &array[5] 真的有效吗?我知道推迟和使用 address-of 会导致未定义的行为(如&(*(array + 5)))。
    • @Oli:你为什么不用array+5 而不是&array[5]?即...int num = std::count(array, array+5, click);
    • @Konrad:这当然是惯用的。 C99 标准引用(我手头没有 C++ 标准)是:“如果结果指向数组对象的最后一个元素,则它不应用作一元 * 运算符的操作数已评估。" (6.5.6/8) 在这种情况下,我不认为它已评估。
    • 我同意 Konrad 的观点,虽然做 array + 5 完全没问题,但做 array[5] 不是,即使它只是应用地址操作符来获得等价物。在大多数情况下,它会被编译器优化掉(&*(array+5) 将被编译器转换为array+5),从而产生某种预期的未定义行为,但它仍然是未定义行为。再举一个例子,如果数组包含一个用户定义的类型T,而不是ints,那么它很可能在不是T 的内存区域上重载T::operator&。标准在这里不做例外,就是UB。
    • @Konrad、@Nawaz、@AAT、@David、@sbi:为了正式讨论这个话题,我创建了一个关于这个主题的问题:stackoverflow.com/questions/5975586/…。不好了!删除!这是stackoverflow.com/questions/988158 的副本,似乎表明它有效的。
    【解决方案2】:

    这就是使用 C 样式数组的方式。

    int i;
    int count = 0;
    for(i = 0; i < ARRAYSIZE; ++i)
    {
        if(array[i] == click)
            ++count;
    }
    

    ARRAYSIZE 是您的静态分配数组的大小,array 您的数组变量,然后单击您要查找的值。在count 中保存了变量的计数。

    【讨论】:

      【解决方案3】:

      你可以使用count

      类似这样的东西(对不起,我不熟悉 C++):

      #include <algorithm>
      
      void someFunction() {
          int input[5];
          // initialize input with some values
          int num = std::count(&input[0], &input[5], 4);
      }
      

      【讨论】:

        【解决方案4】:

        如果没有排序,那么线性搜索是你唯一的选择。

        【讨论】:

          猜你喜欢
          • 2018-11-21
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          • 1970-01-01
          • 2018-04-16
          • 1970-01-01
          • 1970-01-01
          • 2022-10-04
          相关资源
          最近更新 更多