반응형
STL 알고리즘 특징
- 멤버 함수가 아닌 일반 함수로 제공
- <algorithm> 헤더 제공
- 대부분 함수 인자와 반환 타입으로 반복자를 사용
- 자료구조에 독립적 동작
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
int main()
{
std::list<int> s = { 1,2,3,4,5 };
std::vector<int> v = { 1,2,3,4,5 };
auto p1 = std::find(s.begin(), s.end(), 3); list 요소중 3 값 탐색
auto p2 = std::find(v.begin(), v.end(), 3); vector 요소중 3 값 탐색
std::cout << *p1 << std::endl;
std::cout << *p2 << std::endl;
}
find 알고리즘
- [first, last) 사이의 선형 검색을 수행
- last는 검색 대상 아님(iterator.end()에 해당하는 마지막 요소 다음 요소)
- 검색 실패시 0이 아닌 마지막을 요소 반환
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v = { 1,2,3,4,5 };
// [first, last), 선형 검색, 시작요소는 검색에 포함, 마지막 요소는 검색에 포함되지 않음 의미
auto p = std::find(v.begin(), v.end(), 3);
if (p == v.end()) //검색 실패시 v.end() 값 리턴
std::cout << "검색 실패" << std::endl;
auto p1 = std::begin(v);
auto ret = std::find(p1, p1 + 2, 3); // 부분 검색 필요시
if (ret == p1 + 2)
std::cout << "실패" << std::endl;
std::find(ret, std::end(v), 3); // 다음 검색 필요시 두번째 파라미터를 첫째 파라미터로 활용
}
reverse, sort 알고리즘
- 마찬가지로 iterator의 begin, end 값을 파라미터로 지원
- 이외 많은 알고리즘이 제공되며 www.cppreference.com 참고
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v = { 1,2,3,4,5,6,7,8,9,10 };
std::reverse(v.begin(), v.end()); // 집합의 요소 역순 정렬
for (auto& n : v)
{
std::cout << n << ",";
}
std::cout << std::endl; // 개행
std::sort(v.begin(), v.end()); // 집합의 요소 정순 정렬
for (auto& n : v)
{
std::cout << n << ",";
}
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ STL 정리 (0) | 2019.05.12 |
---|---|
C++ STL 정책(Policy Base) (0) | 2019.05.12 |
C++ STL 반복자(iterator) (0) | 2019.05.12 |
C++ STL 컨테이너(Container) (0) | 2019.05.11 |
C++ STL(Standard Template Library) (0) | 2019.05.11 |