http://ikpil.com/603
항목 35 : 대소문자를 구분하지 않는 문자열 비교는 mismatch 아니면 le
xicographical_compare를 써서 간단히 구현할 수 있다.
2008/09/03 13:24 IT책 정리실/Effective STL
내가 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 설명
반응형
'STLTemplate > STL & EffectiveSTL' 카테고리의 다른 글
STL 컨테이너 주의할 점 (0) | 2012.11.01 |
---|---|
이펙티브 STL을 다루는 정리 사이트 (0) | 2012.11.01 |
3. STL 연관 컨테이너 - 19 (0) | 2012.11.01 |
문자열과 integer,float 사이의 변환 (atoi, stringstream) (0) | 2012.11.01 |
string 대소문자 변환 (0) | 2012.11.01 |