#include<iostream>
using namespace std;
/////////////////////////////////////////////////////////////////////////////////
//STL 알고리즘
//guswo C++ 의 대부분의 라이브러리는 Ferneric 을 중요시 합니다 (STL 안드로이드 등)
//
// Generic 이란 무엇인지 생각해 봅시다
//
// 1. 알고리즘 만들기
//
///////////////////////////////////////////////////////////////////////////////////
/*
//1단계 strchr() 의구현
//검색구간 : NULL 로 끝나는 문자열, ㅜㅕㅣㅣdms rjatordp vhgka dksehlsek.
//구간의 표현 : 포인터
//구간의 이동 : 전위형 ++
//실패의 전달 : 0(NULL 포인터 )
//
char * xstrchr(char *s,char c){
while( *s !=0 && *s!=c)
++s;
return *s ==0 ? 0 : s;
}
int main(){
char s[] = "abcdefg";
char *p = xstrchr(s,'c');
cout << *p <<endl;
}
*/
/*
//////////////////////////////////////////////////////////////////////////////
//2단계 구현 일반화 - 부분 문자열도 검색이 가능하게 만드는 방법
// 검색 구간 : [fist , last) 사이의 문자열, ㅣㅁㄴㅅ sms rjatordp vhgkadksehla
// 구간의 표현 : 포인터
// 구간의 이동 : 전위형 ++
// 실패의 전달 : 0 (NULL)
//////////////////////////////////////////////////////////////////////////////
char * xstrchr(char *first, char *last , char value){
while(first !=last && *first !=value)++first;
return first == last ? 0 : first;
}
int main(){
char s[] ="abcedfg";
char * p = xstrchr(s,s+5,'c');
cout<< *p <<endl;
}
*/
/*
//////////////////////////////////////////////////////////////////////////////
//2단계 template 이용하기
//문제점 : 1 . 검색 구간의 타입과 검색 대상의 타입이 연관되어 있다.
//해결책 : double 에 배열에서 int를 검색할 수 없다. 구간의 타입과 검색의 타입을 분리하자!
//
//문제점 : 2. T* 라고 하면 구간은 반드시 진짜 포인터로만 표현 되어야 한다.
// 스마트 포인터를 사용 할 수 없다.
//
/////////////////////////////////////////////////////////////////////////////
template <typename T> T* xfind(T *first, T* last , T value){
while(first !=last && *first !=value)++first;
return first == last ? 0 : first;
}
int main(){
double x[10] = {1,2,3,4,5,6,7,8,9};
double *p = xfind(x, x+10,5.0);
cout << *p << endl;
}
*/
////////////////////////////////////////////////////////////////////////////////
/// 검색내용과 검색부분을 분리해내자! 그렇게되면 스마트 포인터도 사용 할 수있다.
// 검색 구간 : [first, last) 모든 타입의 배열의 부분구간
// 구간의 표현 : 포인터 , 스마트 포인터(단 == , != , * , ++ 4개의 연산자 지원이 되느 스마트 포인터여야 한다.
//
//////////////////////////////////////////////////////////////////////////////
//
//실패의 전달 : last (past the end 라고 부르기도 한다. 마지막검색 다음 요소
//////////////////////////////////////////////////////////////////////////////////////////////
//
// 이..이것슨!! STL 의 find() 알고리즘이다!!!
//
///////////////////////////////////////////////////////////////////////////////////////////
template<typename T1, typename T2> T1 xfind(T1 first, T1 last, T2 value){
while(first !=last && *first !=value)++first;
return first;
}
int main(){
double x[10] = {1,2,3,4,5,6,7,8,9};
double *p = xfind(x, x+10,5.0);
cout << *p << endl;
}
'C,C++ > Android_FrameWork' 카테고리의 다른 글
[SSM 안드로이드 프레임워크 개발 강의]17. 변환 연산자와 변환 생성자. 그리고 활용. (0) | 2012.08.14 |
---|---|
[SSM 안드로이드 프레임워크 개발 강의]16. STL 과 함수객체 (0) | 2012.08.14 |
[SSM 안드로이드 프레임워크 개발 강의]14-3.실제로 안드로이드 프레임웤에서 사용되는 스마트 포인터 (0) | 2012.08.14 |
[SSM 안드로이드 프레임워크 개발강의]14-2 스마트포인터의 얕은복사 해결과 템플릿 (0) | 2012.08.14 |
[SSM 안드로이드 프레임워크 개발 강의]14-1.스마트 포인터 (0) | 2012.08.14 |