【问题标题】:vector count function C++向量计数函数 C++
【发布时间】:2013-10-01 02:19:50
【问题描述】:

我有一个向量

vector<int> vec;

它存储随机数 {5, 7, 8, 9, 13, 15, 17}

我有一个向量,如果它们是否是素数,它会将前一个向量的数字评估为 1 或 0

vector< int> vec_prime_number;

所以对于前一个它将是 {1, 1, 0, 0, 1, 0, 1}

我正在尝试使用 count 函数来只保存质数。而且我在做这件事时遇到了一些问题。

理想情况下,我想让 vec 具有 {5, 7, 13, 17} //也就是说,里面只有素数

我尝试过类似的东西

int cnt = count(vec.begin(), vec.end(), vec_prime_number())

但我无法让它工作。关于如何计算仅存储素数的任何想法?

【问题讨论】:

  • vec_prime_number 不是一个函数,你不应该在它后面加上()
  • “但我无法让它工作。”这意味着什么 ?您的计算机是否反叛并试图杀死您?
  • 我试过 int cnt = count(vec.begin(), vec.end(), vec_prime_number) 还是不行。
  • count 寻找完全匹配,它不搜索匹配的向量。
  • 那么计数与您尝试做的事情有什么关系呢?只需编写一个通过vec_prime_number 的循环。如果元素为1,则将vec的对应元素推到结果向量上。

标签: c++ vector stl


【解决方案1】:

std::count 的文档说:

返回范围 [first,last) 中比较等于 val 的元素数。

因此,您应该使用以下内容来获取素数的数量:

int cnt = count(vec_prime_number.begin(), vec_prime_number.end(), 1);

作为you can see

【讨论】:

    【解决方案2】:

    “理想情况下,我想让 vec 包含 {5, 7, 13, 17} //换句话说,其中只有质数”

    你不需要计算简单地使用:

    bool IsPrime (int i) 
    { 
      /*returns true, if i is Prime */
    }
    
    vec.erase(std::remove_if(vec.begin(), vec.end(), IsPrime), vec.end());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多