在C ++容器中查找唯一的元素

问题描述 投票:0回答:1

我想编写一个函数来查找数组中的唯一偶数。如果此数组中的偶数不等于1,则我的函数应返回0;

#include <array>
#include <algorithm>

using namespace std;

int test(const array<int, 8> &arr) {
  auto isEven = [](int i){return i % 2 == 0;};
  if (count_if(arr.begin(), arr.end(), isEven) != 1)
    return 0;
  auto it = find_if(arr.begin(), arr.end(), isEven);
  return *it;
}

我使用count_ifend_if完成程序。但这是低效的。如果发现唯一的偶数,程序将遍历两次数组。是否存在适当的STL来解决此问题?

c++ stl
1个回答
1
投票

您可以调用find_if两次,第二次从第一次发现的迭代器中调用它。

int test(const array<int, 8> &arr) {
  auto isEven = [](int i){return i % 2 == 0;};
  auto it = find_if(arr.begin(), arr.end(), isEven);
  if (it == arr.end()) return 0;  // not found, the number of even in the array is 0
  auto it2 = find_if(it + 1, arr.end(), isEven);
  if (it2 != arr.end()) return 0; // found, the number of even in the array is more than 1
  return *it;
}
© www.soinside.com 2019 - 2024. All rights reserved.