본문 바로가기

C++197

[STL] map vector, list 문제점 #include using namespace std; class Player { public: Player() : _playerId(0) { } Player(int playerId) : _playerId(playerId) { } public: int _playerId; } int main() { vector v; // 10만명 입장 for (int i = 0; i < 100000; ++i) { Player* p = new Player(i); v.push_back(p); } // 5만명이 퇴장 for (int i = 0; i < 50000; ++i) { int randIndex = rand() % v.size(); Player* p = v[randIndex]; delete p.. 2023. 5. 19.
[STL] deque #include #include // 주제 : deque // vector : 동적 배열 [ ] // list : 이중 연결 리스트 // [ ] [ ] [ ] [ ] // deque : doble-ended queue 데크 // [ ] // [ ] // [ ] int main() { // 시퀀스 컨테이너 (Sequence Container) // 데이터가 삽입 순서대로 나열되는 형태 deque dq; // vector와 사용형태가 굉장히 비슷하다. // capacity가 없다. dq.push_back(1); dq.push_front(2); dq[0]; // 임의접근도 가능. // vector와 마찬가지로 배열 기반으로 동작. // 다만 메모리 할당 정책이 다르다. // vector는 뒤로만. deque는.. 2023. 5. 19.
[Programmers] Lv 2. 다음 큰 숫자 https://school.programmers.co.kr/learn/courses/30/lessons/12911?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include using namespace std; int bit1_number(int n) { int cnt = 0; while (n) { int remain = (n % 2); n /= 2; cnt += (remain == 1) ? 1 : 0; } return cnt; } int solution(int n) { int result = bit1_numbe.. 2023. 5. 19.
[STL] list #2 list 직접 만들어보기. #include using namespace std; #include #include // 오늘의 주제 : list template class Node { public: Node() : _next(nullptr), _prev(nullptr), _data(T()) { } Node(const T& value) : _next(nullptr), _prev(nullptr), _data(value) { } public: Node*_next; Node*_prev; T_data; }; template class Iterator { public: Iterator() : _node(nullptr) { } Iterator(Node* node) : _node(node) { } // ++it Iter.. 2023. 5. 19.
[Programmers] Lv 2. 숫자의 표현 https://school.programmers.co.kr/learn/courses/30/lessons/12924?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include using namespace std; int solution(int n) { int answer = 1; // 자기자신 + 1 // 두 개의 반복문을 이용해 연속된 숫자로 n이 되면 ++answer로 증가. for (int i = 1; i n) break; // 연속된 숫자의 합이 n보다 커질경우, 반복문 종료 } } return answer.. 2023. 5. 18.
[Programmers] (월간 코드 챌린지 시즌1) Lv 2. 이진 변환 반복하기 https://school.programmers.co.kr/learn/courses/30/lessons/70129?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include #include #include #include using namespace std; vector solution(string s) { int count{0}, erase{0}; while (s != "1") { while (find(s.begin(), s.end(), '0') != s.end()) { s.erase(find(s.begin().. 2023. 5. 16.
[C++] Chapter 10. 콜백 함수 (Callback) 콜백함수 함수 포인터 + 함수 객체 + 템플릿 콜백 (Callback) : 다시 호출하다? 역으로 호출하다? 게임을 만들 때, 이런 콜백의 개념이 자주 등장한다. ex) MoveTask 실습 등 어떤 상황이 일어나면 → 이 기능을 호출해줘 ex) UI 스킬 버튼을 누르면 → 스킬을 쓰는 함수를 호출 (함수 포인터 or 함수 객체 등 으로 넘겨줌) 함수 포인터는 사용 안했고, 함수 객체와 템플릿을 사용한 예 class Item { public: int _itemId = 0; int _rarity = 0; int _ownerId = 0; } class FindByOwnerId { public: // 함수 객체를 사용하기 위한 연산자 오버로딩 bool operator()(const Item* item) { r.. 2023. 5. 15.
[C++] Chapter 09. 템플릿(Template) #2 템플릿 : 함수나 클래스를 찍어내는 툴 함수 템플릿 클래스 템플릿 클래스 템플릿 사용 전 class RandomBox { public: int GetRandomData() { int idx = rand() % 10; return _data[idx]; } public: int _data[10] } int main() { srand(time(nullptr)); RandomBox rb1; for (int i = 0; i < 10; ++i) { rb1.data[i] = i; } int value1 = rb1.GetRandomData(); cout 2023. 5. 12.
[C++] Chapter 08. 템플릿(Template) #1 템플릿 : 함수나 클래스를 찍어내는 툴 함수 템플릿 클래스 템플릿 함수 템플릿 사용 전 void Print(int a) { cout 2023. 5. 12.
[C++] Chapter 07. 함수 객체 함수 객체 (Functor) : 함수처럼 동작하는 객체 함수 포인터의 단점 완전히 동일한 시그니처로 만들어진 함수만 들고있을 수 있지만, 함수 객체를 사용하면 어느 정도 극복 가능 시그니처가 안 맞으면 사용할 수 없다. 상태를 가질 수 없다. (멤버를 가질 수 없어서 경우에 따라서 기존에 실행했던 또는 저장했던 데이터를 유지시키고 싶지만 그럴 수 없다.) [함수처럼 동작]하는 객체 그래서 () 연산자 오버로딩이 필요하다 class Functor { public: void operator()() { cout 2023. 5. 12.