반응형

내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필





이번 항목은 두 알고리즘의 사용 방법을 알아보자는 취지로 이야기 된 것 같다. 그러므로 나는 두 알고리즘의 사용 법을 기준으로
 설명을 하도록 한다

두 알고리즘 전부 algorithm 안에 들어 있다.

각각 어떻게 사용 하는지, 그 소스코드를 보자.

#include <iostream>
#include <algorithm>
#include <vector>
 
int main( void )
{
    int a[10];
    std::vector<int> v(10);
    for( int i = 0; i < 10; i++ )
    {
        a[ i ] = i;
        v[ i ] = i;
    }
    // 일부러 틀리게 셋팅
    v[ 3 ] = 10;
 
    // 비교 후 틀리면
    // 틀린 위치의 a 배열 값과 v 컨테이너 이터레이터를 뱉어냄
    std::pair<int*, std::vector<int>::iterator > p =
        std::mismatch( &a[0], &a[9], v.begin() );
 
    // 만약 틀린게 없다면, 둘다 끝의 값을 p 에 저장함
    std::cout << *p.first << std::endl;
    std::cout << *p.second << std::endl;
     
    return 0;
}


한가지 주의 해야 할 점은 첫번째 범위 데이터는 두번째 범위데이터 보다 짦은 범위의 인자를 넣어야 한다는 것이다. 다른것은 그냥 컴파일 해보면 알수 있을 것이다.

#include <iostream>
#include <algorithm>
#include <vector>
 
int main( void )
{
    int a[10];
    std::vector<int> v(10);
    for( int i = 0; i < 10; i++ )
    {
        a[ i ] = i;
        v[ i ] = i;
    }
    // 일부러 틀리게 셋팅
    v[ 3 ] = 10;
 
    // 기본적으로 less 비교를 한다.
    // 리턴값 : 첫번째 범위 구역의 값들 중 두번째 범위구역 값들보다
    // 작거나 같으면 TRUE 아니라면 FALSE
    if( std::lexicographical_compare(&a[0], &a[9], v.begin(), v.end()) )
    {
        std::cout << "성공" << std::endl;
    }
    else
    {
        std::cout << "실패" << std::endl;
    }
 
    return 0;
}

주의 해야 할 구역은 주석을 달아 두었다.


관련링크
http://ilu8318.egloos.com/833073
http://turboc.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=19
http://www.winapi.co.kr/clec/cpp4/42-1-4.htm - mismatch 설명

반응형

+ Recent posts