반응형



#include <vector>

#include <algorithm>

int main()

{

//v에서 제일 작은 값을 찾고 싶다. 어떻게?

vector<int> v{ 2,5,4,1,6,3 };

auto p = min_element(v.begin(), v.end());

cout << *p;

}


min_element하면 내가 선언한 컨테이너 중 에서

가장 작은 값을 찾아온다고 한다.


//////////////////////////////////////////////

template<class Iter>

Iter minElement(Iter begin, Iter end)

{

while (begin != end)

{

if (*begin < *end)

--end;

else

++begin;

}

return end;

}


int main()

{

//v에서 제일 작은 값을 찾고 싶다. 어떻게?

vector<int> v{ 2,5,4,1,6,3 };

auto d = minElement(v.begin(), v.end());

//auto p = min_element(v.begin(), v.end());

cout << *d;

}


이번에는 template를 만들어서 구현했다.

 *를 사용해 ++/-- 로 값을 알 수 있다.


//////////////////////////////////////////////////////

template<class Iter, class Value>

Iter myFind(Iter begin, Iter end, Value val)

{

while (begin != end)

{

if (*begin == val)

return begin;

++begin;

}

return end;

}


int main()

{

//v에서 제일 작은 값을 찾고 싶다. 어떻게?

vector<int> v{ 2,5,4,1,6,3 };



//v에서 어떤 값을 찾고 싶다.

while (true)

{

int val;

cout << "찾으실 값을 입력하세요" << endl;

cin >> val;

if (val == -1) break;

auto p = myFind(v.begin(), v.end(), val);

if (p == v.end())

cout << "Not Found" << endl;

else

cout << *p << "을(를) 다 찾았습니다." << endl;

}

}

인자값 하나를 더 추가해서

바꾼것 뿐이다.


///////////////////////////////////////////////



class Data {

int n;

public:

explicit Data(int a) :n(a) {};

bool operator==(const Data& other) {

return n == other.n;

}


};


template<class Iter, class Value>

Iter myFind(Iter begin, Iter end, Value val)

{

while (begin != end)

{

if (*begin == val)

return begin;

++begin;

}

return end;

}


int main()

{

//v에서 제일 작은 값을 찾고 싶다. 어떻게?

vector<Data> v{ Data(2), Data(5), Data(4) };


//v에서 어떤 값을 찾고 싶다.


auto p = myFind(v.begin(), v.end(), Data(5));

if (p == v.end())

cout << "NO" << endl;

else

cout << "ㅇㅋ" << endl;

}

class일때 사용법과

operator 만들기


operator에 대해서 아직 잘 모르는것 같기도 하다..


//////////////////////////////////////////////


int main()

{

//v에서 제일 작은 값을 찾고 싶다. 어떻게?

//set은 자동으로 빨리 정렬되니까 함수를 따로 쓸 필요가 없음. v.find해주면 됩니다.

set<int> v{ 2,5,4,1,6,3 };

v.find(3);

}


중요한 것은

set은 자동으로 정렬해주기 때문에

따로 정렬을 sort, qsort or 다른 함수를 만들어서

해줄 필요가없다.


무엇보다 .find가 있기때문에 그냥해줘도된다.



반응형

'프로그래밍 > STL' 카테고리의 다른 글

람다함수  (0) 2017.09.14
반복자의 기본연산  (0) 2017.04.30
람다(Lambda)함수  (0) 2017.04.30
STL  (0) 2017.04.28

+ Recent posts