GameChoi
Choi Programming
GameChoi
전체 방문자
오늘
어제
  • 분류 전체보기 (468)
    • C++ Algorithm & Study (184)
      • C++ & Algorithm Strategies (45)
      • Game Math & DirectX 11 (72)
      • Server + UE5 (29)
      • Lyra Clone Coding (37)
    • Create Game (284)
      • [Window API] Game Client & .. (55)
      • [DirectX] DirectX 2D & 3D (155)
      • [UE5] BLUEPRINT & C++ (74)
    • odds and ends (0)
      • English (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Game Server
  • Game Room
  • Direct3D
  • GAME Client
  • Algorithm Strategies
  • job queue
  • protobuf
  • client
  • Destination Move Packet
  • Player State
  • server
  • core
  • session
  • UE5
  • Direct11
  • Network Worker
  • RPG Game
  • c++
  • Player Move Packet
  • Other Character

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GameChoi

Choi Programming

[C++] 12 - 기초 문법 공부 일지(STL)
C++ Algorithm & Study/C++ & Algorithm Strategies

[C++] 12 - 기초 문법 공부 일지(STL)

2022. 12. 6. 21:01
  • 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
    'C++ Algorithm & Study/C++ & Algorithm Strategies' 카테고리의 다른 글
    • [C++] 14 - 기초 문법 공부 일지(Smart Pointer)
    • [C++] 13 - 기초 문법 공부 일지(Sort)
    • [C++] 11 - 기초 문법 공부 일지(MAP)
    • [C++] 10 - 기초 문법 공부 일지(Tree)
    GameChoi
    GameChoi

    티스토리툴바