C++에서 배열에 요소가 포함되어 있는지 확인

Shikha Chaudhary 2023년10월12일
  1. 루프를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인
  2. std::find를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인
  3. Std::Count를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인
  4. std::binary_search를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인
  5. any_of() 함수를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인
  6. 결론
C++에서 배열에 요소가 포함되어 있는지 확인

C++에서 배열로 작업하는 동안 배열에 C++의 요소가 포함되어 있는지 확인해야 할 수도 있습니다. 이것은 단순히 루프를 사용하여 수행할 수 있지만 다른 효율적인 방법도 동일하게 수행할 수 있습니다.

이 기사에서는 C++에서 배열에 요소가 있는지 확인하는 다양한 방법을 안내합니다. 읽어.

C++의 표준 라이브러리는 배열에 C++의 요소가 포함되어 있는지 확인하는 데 사용할 수 있는 몇 가지 알고리즘과 함수를 제공합니다. 그러나 먼저 루프를 사용하여 이를 수행하는 방법을 살펴보겠습니다.

루프를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인

for 루프를 사용하여 매우 간단하게 유지할 수 있습니다. 여기 아래 코드에서 points라는 배열과 key라는 이름을 검색해야 하는 요소가 있습니다.

main 블록 내에서 for 루프를 사용하여 모든 요소를 ​​선형으로 탐색합니다. 각 반복에서 현재 요소가 찾고 있는 요소와 동일한지 확인합니다.

key 요소가 발견되면 루프가 중단되고 부울 변수 present의 값이 false로 업데이트됩니다. 나중에 이 변수 ​​present의 값을 기반으로 원하는 출력을 인쇄합니다.

예제 코드:

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
  int points[] = {23, 45, 56, 12, 34, 56};
  int key = 56;

  bool present = false;
  for (int i : points) {
    if (i == key) {
      present = true;
      break;
    }
  }
  if (present) {
    cout << "The element is present";
  } else {
    cout << "The elment is not present";
    return 0;
  }

출력:

The element is present

이것이 배열에서 요소를 검색하는 가장 쉬운 방법이지만 더 나은 다른 방법도 있습니다. 다음 섹션에서 이에 대해 논의할 것입니다.

std::find를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인

std::find 기능은 주로 특정 범위의 요소를 검색하는 데 사용됩니다. 이 기능은 [first, last) 범위에서 필요한 요소를 검색합니다.

통사론:

InputIterator find(InputIterator first, InputIterator last, const T& val);

다음은 std::find 함수를 사용하여 배열에서 요소를 검색하는 코드입니다. 여기에서 부울 변수 presentstd::find 함수를 사용하여 points 배열을 반복합니다.

std::find 함수는 세 개의 인수를 취합니다.

  1. 배열의 초기 위치에 대한 반복자 역할을 하는 변수 points
  2. 배열의 마지막 위치에 대한 반복자 역할을 하는 표현식 points+x
  3. 검색할 값인 key 변수

값을 찾을 수 없는 경우 이 함수는 배열의 끝으로 반복자를 반환하지만 present 변수 값을 기반으로 원하는 명령문을 인쇄할 수 있습니다.

예제 코드:

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
  int points[] = {23, 45, 56, 12, 34, 56};
  int key = 56;

  int x = sizeof(points) / sizeof(*points);

  bool present = std::find(points, points + x, key) != points + x;

  if (present) {
    cout << "The element is present";
  } else {
    cout << "The element is not present";
  }
  return 0;
}

출력:

The element is present

위에서 언급한 인수를 전달하는 것이 혼란스럽다면 begin()end() 함수를 각각 사용하여 배열의 시작과 끝에 두 개의 반복자를 전달할 수도 있습니다.

예제 코드:

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
  int points[] = {23, 45, 56, 12, 34, 56};
  int key = 56;

  bool present = std::find(begin(points), end(points), key) != end(points);

  if (present) {
    cout << "The element is present";
  } else {
    cout << "The element is not present";
  }
  return 0;
}

출력:

The element is present

begin()end() 함수를 직접 사용하여 코드를 단순화하는 방법을 확인하십시오. 이전 코드의 인수처럼 작동합니다.

Std::Count를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인

또 다른 방법은 std::count 알고리즘을 사용하는 것입니다. 기본적으로 이 알고리즘은 주어진 범위에서 요소가 보이는 횟수를 계산합니다.

반환된 개수의 값이 0이 아니면 배열에 요소가 있음을 의미합니다. std::count 알고리즘은 [first, last) 범위 사이의 요소 발생 횟수도 계산합니다.

통사론:

int counter(Iterator first, Iterator last, T &val)

코드를 보고 어떻게 작동하는지 이해하십시오.

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
  int points[] = {23, 45, 56, 12, 34, 56};
  int key = 56;

  cout << std::count(begin(points), end(points), key);
}

출력:

2

이 함수에 필요한 인수를 전달하고 결과를 인쇄하는 방법을 확인하십시오. key56points 배열의 두 위치에 있으므로 2로 출력됩니다.

이제 이것을 부울 변수 present와 병합하여 key 변수의 개수가 0보다 큰지 여부를 확인합니다. 그렇다면 단순히 요소가 배열에 있음을 의미합니다.

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
  int points[] = {23, 45, 56, 12, 34, 56};
  int key = 56;

  bool present = std::count(begin(points), end(points), key) > 0;

  if (present) {
    cout << "The element is present";
  } else {
    cout << "The element is not present";
  }
  return 0;
}

출력:

The element is present

당연히 이 알고리즘은 요소 개수를 찾기 위해 전체 배열을 탐색하기 때문에 std::find보다 성능이 느립니다.

std::binary_search를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인

배열이 정렬된 경우 C++에서 배열에 요소가 포함되어 있는지 확인하는 가장 효율적인 방법은 이진 검색 알고리즘을 사용하는 것입니다. C++의 표준 라이브러리는 동일한 작업을 위한 binary_search 알고리즘을 제공합니다.

std::binary_search 알고리즘은 요소가 [first, last) 범위에 있는 경우 true 값을 반환합니다. 그렇지 않으면 거짓을 반환합니다.

아래 코드에서 checkEle()라는 함수를 만들었습니다. 이 함수는 먼저 sort() 함수를 사용하여 배열을 정렬한 다음 std::binary_search 알고리즘을 사용하여 key 요소를 검색합니다. .

예제 코드:

#include <algorithm>
#include <iostream>
using namespace std;

bool checkEle(int a[], int x, int key) {
  if (x <= 0) {
    return false;
  }
  sort(a, a + x);
  return std::binary_search(a, a + x, key);
}

int main() {
  int points[] = {23, 45, 56, 12, 34, 56};
  int key = 56;

  int x = sizeof(points) / sizeof(*points);

  bool present = checkEle(points, x, key);

  if (present) {
    cout << "The element is present";
  } else {
    cout << "The element is not present";
  }
  return 0;
}

출력:

The element is present

이것은 어레이를 정렬하기 위해 먼저 sort() 함수를 사용하면 시간 복잡도가 훨씬 더 증가하기 때문에 어레이가 이미 정렬된 경우에만 유용합니다.

any_of() 함수를 사용하여 C++에서 배열에 요소가 포함되어 있는지 확인

any_of() 함수를 사용하여 술어가 주어진 범위에 있는 요소를 준수하는지 확인할 수 있습니다. 그렇다면 true를 반환합니다. 그렇지 않으면 거짓을 반환합니다.

통사론:

template <class InputIterator, class UnaryPredicate>
bool any_of(InputIterator begin, InputIterator end, UnaryPredicate p);

술어가 어떻게 정의되는지 이해하려면 코드를 보십시오. 여기에서 any_of() 함수를 호출하는 것과 함께 현재 요소가 우리가 찾고 있는 key와 같은지 동시에 확인하는 and 조건도 사용합니다.

조건이 요소에 대해 충족되면 부울 변수 present의 값이 true로 업데이트됩니다.

#include <algorithm>
#include <array>
#include <iostream>
using namespace std;

int main() {
  int points[] = {23, 45, 56, 12, 34, 56};
  int key = 56;

  bool present =
      std::any_of(begin(points), end(points), [&](int i) { return i == key; });

  if (present) {
    cout << "The element is present";
  } else {
    cout << "The element is not present";
  }
  return 0;
}

출력:

The element is present

이것이 any_of() 함수가 배열의 요소를 검색하는 방법입니다. 이것은 C++에서 배열의 요소를 검색하는 방법에 관한 것입니다.

결론

이 기사에서는 C++에서 배열에 요소가 포함되어 있는지 확인하는 다양한 접근 방식에 대해 설명했습니다. 우리는 C++에서 간단한 for 루프가 사용되는 방법과 std::find, std::countstd::binary_search와 같은 알고리즘과 함께 작동하는 방법을 보았습니다.

그러나 이러한 모든 방법은 동일한 목표를 달성합니다. 원하는 최상의 접근 방식을 결정하는 것은 전적으로 귀하에게 달려 있습니다.

관련 문장 - C++ Array