- STL
- 표준 템플릿 라이브러리
- container - 자료를 저장하는 클래스 템플릿들의 집합
- iterator - 컨테이너 원소를 순회하는 방법을 추상화한 객체
- algorithm - 정렬, 삭제, 검색 등을 수행하는 작업을 정의해 놓은 템플릿 함수
1. vector
int main()
{
vector<int> v;
for (int i = 0; i < 10; i++)
v.push_back(rand() % 10);
}
2. find, find_if
- lambda 사용
- [capture] (parameters) → return type {statement}
- capture
- [&] call-by-reference
- [=] call-by-value
- [=, &x] [&, x] 외부의 변수들을 가지고 오고 x값을 가져옴
- [x, &y] 지정한 변수들을 지정한 것에 따라 가져옴
int main()
{
auto it = std::find(v.begin(), v.end(), 4);
if (it != v.end()) cout << *it << endl; // 4의 값이 있으면 4를 출력
auto its = std::find_if(v.begin(), v.end(),
[=](int number) -> bool { return (number % 2 == 0); }); // c++ 11
if (its != v.end()) cout << *its << endl; // 짝수면 출력
}
3. all_of, any_of, none_if
int main()
{
// 모든 데이터가 홀수
bool allOf = std::all_of(v.begin(), v.end(),
[=](int number) -> bool { return (number % 2 != 0); });
// 홀수인 데이터가 하나라도 있으면
bool anyOf = std::any_of(v.begin(), v.end(),
[=](int number) -> bool { return (number % 2 != 0); });
// 모든 데이터가 홀수가 아니면
bool noneOf = std::none_of(v.begin(), v.end(),
[=](int number) -> bool { return (number % 2 != 0); });
}
4. for_each
int main()
{
std::for_each(v.begin(), v.end(),
[=](int number) -> int { return (number += 1); });
}
5. remove, remove_if
int main()
{
int number = 0;
auto it = std::remove(v.begin(), v.end(), number);
auto its = std::remove_if(v.begin(), v.end(),
[=](int number) -> bool { return (number % 2 != 0); });
v.erase(its, v.end()); // remove 사용시 주의점 - 삭제 방식을 알고 있어야 함
}
TODO - STL 사용할 시 추가
- Function Pointer
- 데이터 값을 가리키는 대신 메모리 내에서 실행 가능한 코드를 가르킴
- 역참조 될 때 함수 포인터는 가리키는 함수를 보통의 함수 호출처럼 작동 시키고 인자를 보내는데 사용
void Print() { cout << "Hello World" << endl; }
int main()
{
using Function = void(void);
Function* func = &Print;
func(); // Hello World
// void (*FunctionType)();
using FunctionType = void(*)();
FunctionType ptr = &Print; // 콜백함수 -> UI, 온라인 게임, 키보드 입력에 유용
}
class Functor
{
public:
void Print() {cout << "Hello World" << endl; }
};
int main()
{
// 멤버 함수 포인터 - 함수 호출 규약이 다름
using memberFunctor = void(Functor::*)();
memberFunctor memberFunc = &Functor::Print;
}
1. 플레이어 생성
class Player
{
public:
Player(bool createPlayer) : createPlayer(createPlayer) {}
~Player() {}
public:
bool createPlayer = false;
};
2. 함수 포인터 생성
using FunctionType = bool(*)(Player* player);
Player* FindCreatePlayer(Player* player, FunctionType create) { if (create(player)) return player; }
bool CreatePlayer(Player* player) { return player->createPlayer; }
3. 메인 함수
int main()
{
Player* player = new Player(true);
cout << FindCreatePlayer(player, CreatePlayer)->createPlayer << endl;
}
'C++ Algorithm & Study > C++ & Algorithm Strategies' 카테고리의 다른 글
[C++] 14 - 기초 문법 공부 일지(Smart Pointer) (0) | 2022.12.11 |
---|---|
[C++] 13 - 기초 문법 공부 일지(Sort) (1) | 2022.12.08 |
[C++] 11 - 기초 문법 공부 일지(MAP) (0) | 2022.12.06 |
[C++] 10 - 기초 문법 공부 일지(Tree) (0) | 2022.12.05 |
[C++] 9 - 기초 문법 공부 일지(Graph) (2) | 2022.12.03 |