c++ find 예제

리눅스에서 위의 예제를 컴파일하려면 다음 명령을 사용, 사용 std::find. 검색된 값과 동일한 첫 번째 요소를 가리키는 이터레이터를 반환하거나 값이 발견되지 않은 경우 컬렉션의 끝을 반환합니다. 이제 숫자 22가 벡터에 있는지 찾으려면 ? 그렇다면 벡터의 인덱스 또는 위치는 무엇입니까? 또한 문자의 발생을 찾는 데 사용할 수 있습니다: 아래 구문에서 c는 문자입니다. std 네임스페이스에 있는 찾기 함수, 즉 std:find를 사용할 수 있습니다. 검색하려는 벡터에서 시작 및 종료 반복기를 std::find 함수를 검색하고 결과 반복기를 벡터의 끝에 비교하여 일치하는지 확인합니다. std::find와는 달리 std::lower_bound에 의해 반환된 이터레이터가 요소의 컬렉션에 있는지 여부를 알기 위해 끝과 다른지 확인할 수 없습니다. 실제로 요소가 없는 경우 std:::lower_bound는 컬렉션의 끝이 아니라 있어야 하는 위치를 반환합니다. 따라서 반환된 이터레이터가 범위의 끝이 아닌지 확인하고 값이 검색한 요소와 동일한 요소를 가리키는지 확인해야 합니다. 기본적으로 벡터의 모든 요소를 반복하고 주어진 요소가 있는지 여부를 확인해야합니다.

이 작업은 std::find 즉 sortED 요소에 대한 std::find를 사용하여 한 줄로 수행할 수 있습니다. 그러나 std::find는 같음과 동등성이 아닌 같음을 사용하기 때문에 정렬된 컬렉션에 대해 실제로 만들어지지 않으며 로그 시간단위가 아닌 선형 시간에 작동합니다. 이제 주어진 컬렉션의 경우, 요소 의 유형에 대한 평등이 현재와 미래의 동등성과 동일하고 선형 시간을 지불 할 준비가되어 있다고 확신하는 경우 std::find는 올바른 결과를 얻을 수 있으며 straightforwar의 혜택을 누릴 수 있습니다. d 인터페이스. 그러나 일반적인 경우에는 정렬된 범위에서 작동하도록 설계되지 않았다는 점에 유의하십시오. stl의 알고리즘 헤더에서 찾기를 사용합니다. int 형식과 함께 사용하는 것을 설명했습니다. 같음(사용자 지정 클래스에 필요한 경우 과부하 ==)을 비교할 수 있는 한 원하는 모든 형식을 사용할 수 있습니다.

다른 사람들이 말했듯이 STL 찾기 또는 find_if 함수를 사용합니다. 그러나 매우 큰 벡터에서 검색하고 성능에 영향을 미치는 경우 벡터를 정렬한 다음 binary_search, lower_bound 또는 upper_bound 알고리즘을 사용할 수 있습니다. std::list는 개미 찾기() 또는 포함() 메서드를 제공하지 않습니다. 따라서 목록에서 요소를 검색하거나 std::list에 요소가 있는지 확인하려면 일부 코드를 작성하지 않는 경우, 즉 값과 같지 않고 조건어를 만족시키는 요소의 존재를 확인합니다. , sd::count_if, std::find_if 및 std::find_if_not를 사용하여 설명이 있어야 합니다. 이 std의 다른 모든 사용에 대 한 보유::카운트 및 std::이 게시물을 통해 찾기. 이 질문은 std::find로 표현할 수 있으며 범위의 끝과의 비교와 결합됩니다: 이러한 이유로 std::find는 이러한 필요성에 더 일반적으로 사용됩니다.