#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가 있기때문에 그냥해줘도된다.