표준 템플릿 라이브러리 STL(Standard Template Library)STL을 간단하게 말하면일반적으로 많이 사용될 수 있는 자료구조와 알고리즘 모음 라이브러리이다!정답은 STL 이름에 포함 되어 있다.바로 T 인 Template으로 만들어진 것이다!STL을 이
함수 오버로딩에 의해서 경험치를 비교할 때는 int 타입의 Max함수가 아닌float타입을 비교하는 Max가 호출되어 버그가 사라지게 되었다.이제 HP, Exp 비교는 끝나서 다음 기획서에 있는 '돈'을 구현하려고 한다.그런데 돈을 저장하는 변수의 타입을 int64 이
정답은 'const'를 사용하여 내부에서 변경하는 것을 막고, Max 함수를 사용하는 사람에게 알리는 역할을 한다.위 Code1에서 typename과 Code2에서의 class는 다를바가 없다.C++ 표준화 전후에 만들어진 컴파일러에서는 class를 사용해야 한다.현재
함수 템플릿의 전문화 라는 것이 있다!위 Code1 실행 결과는 아래처럼 나온다.이전 글에서 말했듯이 컴파일러는 프로그래머의 생각을 완전히 이해하지 않는다. (S.T.U.P.I.D)정답은왜애애애?? (개발자니까 항상 의문 갖는 습관을 기르자!)호출 순서에 규칙이 있기
게임에서는 특정한 이벤트가 있을 때는 캐릭터의 'HP, 경험치, 돈'을 이벤트 기념으로 주는 경우가 있다. 'HP와 경험치, 돈'의 타입은 다르지만 추가 되는 값은 int 상수로 정해져 있다. 위와 같이 타입은 다르지만, 상수를 더한 값을 얻는 함수를 만들려면 어떻게
간단히 이야기해서 '함수 템플릿'이 함수에 템플릿을 사용한 것처럼 '클래스 템플릿'은 클래스에 템플릿을 사용한 것이다.경험치면 경험치에 관련된 클래스를, 돈이면 돈에 관련된 클래스, 이렇게 계속 만들다 보면 클래스의 양이 어마어마 해질 것이다.. (매우매우매우 비효율적
일반 함수에서 함수 인자의 디폴트 값을 지정하듯이 클래스 템플릿의 파라미터도 디폴트 값으로 할 수 있다.실행 결과는 아래와 같다.'3.' 의 코드에서 잘 보지 못한 키워드가 있을 것이다. 바로 explicit이다. explicit 키워드로 규정된 생성자는 암시적인 형
클래스 템플릿은 템플릿 파라미터 중 일부를 '구체적인 형(type)'을 사용, 또는 템플릿 파라미터를 포인터나 참조를 사용하여 부분 전문화를 할 수 있다.위의 예에서는 템플릿 파라미터 2개 중 일부를 구체화하여(float) 부분 전문화를 했지만, 2개 이상도 가능하다.
STL은 C++ 템플릿을 사용해 만든 표준 라이브러리이다.STL중에서 가장 많이 사용되는 라이브러리는 컨테이너 라이브러리이다. 컨테이너는 말 그대로 무엇인가를 담는 것이다. 컨테이너는 int, float 등의 자료형이나 구조체, 클래스 같은 사용자 정의형을 담는다. (
지정된 위치에 삽입하며, 세가지 방식이 있다.iterator insert(iterator \_Where, const Type& \_Val);void insert(iterator \_Where, size_type_Count, const Type& \_Val);templa
\*\* 선언 : list<자료형> 변수이름 동적할당 : list<자료형>\* 변수이름 = new list<자료형>();list에 저장된 데이터에 접근하려면 반복자를 사용해야 함으로 list를 설명하기 전에 반복자에 대해서 간단하게 이야기한다.
STL을 사용하지 않는다면, C/C++언어, 자료구조를 공부하고 필요한 자료구조를 직접 만들어 사용해야 한다. 즉 불필요한 시간을 소비하고, 잘못 구현하여 버그를 만들 위험이 있고, 개인마다 구현 방법이 다르므로 사용이나 유지보수 측면에서 불편하다.STL list를 사
list에서 지정한 값과 일치하는 모든 데이터를 삭제한다.erase와 다른 점은 erase는 반복자를 통해서 삭제하지만, remove는 값을 통해서 삭제한다.원형 :void remove(const Type& \_Val);ex)list가 구조체(클래스)의 포인터를 담고
vector는 list와 같은 STL의 컨테이너 라이브러리이다.vector는 STL이 지원하는 자료구조 중에서도 가장 자주 사용한다. 프로그래밍 할 때 가장 자주 사용하는 자료구조는 배열이다. vector는 배열을 대체하여 사용할 수 있다. vector는 배열과 비슷한
저장할 데이터 개수가 가변적이다!배열과 vector의 가장 큰 차이점은 '배열은 크기가 고정이고, vector는 크기가 동적으로 변한다' 이다. 저장할 데이터 개수를 미리 알 수 없다면 vector를 사용하는 편이 좋다.중간에 데이터 삽입이나 삭제가 없다!vector는
vector를 사용하려면 vector 헤더파일을 포함해야 한다.
STL 컨테이너 라이브러리는 사용하는 방법이 서로 비슷하므로 하나만 잘 알면 다른 컨테이너도 쉽게 배울 수 있다! 덱(deque)의 자료구조 및 특징을 잘 파악하자!!이름과 같이 deque(Double Enabled Queue) 자료구조이다. 덱(deque) 자료구조는
크기가 가변적이다!리스트(List)와 같이 데이터를 담을 수 있는 크기가 가변적이다.앞과 뒤에서 삽입과 삭제가 좋다!덱(Deque)이 다른 자료구조와 가장 다른 점으로 앞과 뒤에서 삽입,삭제가 좋다.중간에 데이터 삽입, 삭제가 용이하지 않다.데이터를 중간에 삽입하거나
덱(deque)은 전체적으로 멤버 함수의 기능이나 사용방법이 벡터(vector)와 거의 같다. 벡터(vector)는 삽입과 삭제를 뒤에서만 해야 성능이 좋지만, 덱(deque)은 삽입, 삭제를 앞과 뒤에서 해도 좋으며 앞과 뒤 삽입, 삭제 성능도 벡터(vector)보다
컴퓨터 암호화 기술의 일종으로 요약함수라고 한다.key라는 값을 어떠한 연산을 통하여 해시값을 만들어낸다.해당 key는 해시값을 가지고 있게 되는데,key와 해시값을 매핑해놓은 것을 '해시맵(hash_map)'이라고 한다!덱(deque)까지 STL의 컨테이너에 대해서
'연관 컨테이너'로는 map, set, hash_map, hash_set 이 있다.이것들은 key로 사용하는 값이 중복되지 않는 때 사용한다. 만약 중복되는 key를 사용할 때는 컨테이너의 앞에 'mulit'를 붙인 mulit_map, multi_set, hash_mu
hash_map의 자료구조는 '해시 테이블'이다. '해시 테이블'에 자료를 저장할 때는 key값을 해시 함수에 대입하여 버킷 번호가 나오면 그 버킷의 빈 슬롯에 자료를 저장한다.key값을 해시 함수에 입력하여 나오는 버킷 번호에 자료를 넣으므로 많은 자료를 저장해도 삽
hash_map은 표준 STL의 namespace와 다른 이름을 사용한다.따라서 namespace를 선언할 때 실수하지 않게 조심해야 한다!헤더파일 :hash_map이 속한 namespace는 표준 STL과 다른 'stdext'이다.using namespace stde
hash_map에 저장한 요소 중에서 key값으로 해당 요소의 시작 위치를 얻을 때 사용하는 멤버들이다. key값의 비교는 크기가 아닌 저장 되어 있는 요소의 순서이다. '23, 4, 5, 18, 14, 30' 이라는 순서로 key값을 가진 요소가 저장되어 있으며 ke
map의 자료구조는 '트리(tree)'이다.(정확하게 말하면 트리 자료구조 중의 하나인 '레드-블랙트리(Red-Black-tree)'이다.트리는 한글로 '나무이다. 나무는 뿌리에서 시작하여 여러 갈래의 가지가 있고, 가지의 끝에는 나무 잎이 있다. 트리 자료구조도 이와
\- 헤더파일 :\- 사용방법 :map < key자료형, value자료형 > 변수이름;map < int, int > map1;value는 저장할 자료이고, key는 value를 가리키는 것이다.앞 글에서 map은 자료를 저장할 때 정렬을 한다고 말했다. 정렬
map의 자료구조는 '트리(tree)'이다. 정확하게는 '레드 블랙 트리(Red-Black tree)'이다.트리는 노드를 균형 있게 가지는 것이 성능에 유리하기 때문에기본 트리에서 변형된 B-트리, B+트리, R-트리, 레드 블랙 트리, AVL트리 등 다양한 종류의 자
헤더파일 : 사용방법 :map < key자료형, value자료형 > 변수이름;map < int, int > map1;value는 저장할 자료이고, key는 value를 가리키는 것이다.앞 글에서 map은 자료를 저장할 때 내부에서 자동적으로 정렬 해준다고 말
map에서는 자료를 추가 할 때 isnert를 사용한다.원 형 :pair < iterator, bool > insert( const value_type& \_Val );iterator insert( iterator \_Where, const value_type&
다른 컨테이너와 같이 '정방향 반복자' begin(), end()와 '역방향 반복자' rbegin(), rend()를 지원한다!정방향으로 map1의 모든 요소의 value를 출력역방향으로 map1의 모든 요소의 value를 출력map을 정의할 때 비교함수를 사용할 수
map에서 검색은 key값을 대상으로 한다.key와 같은 요소를 찾으면 그 요소의 반복자를 리턴하고,찾지 못한 경우에는 end()를 가리키는 반복자를 리턴한다. (기억하자!)원 형 :두 방식의 차이는 리턴된 반복자가 const냐 아니냐의 차이이다.첫 번째 방식은 con
저장하고 있는 요소를 삭제할 때는 erase와 clear를 사용한다.erase는 특정 요소를 삭제할 때 사용하고, clear는 모든 요소를 삭제할 때 사용한다.원 형 :iterator erase( iterator \_Where );iterator erase( itera
map과 비슷하면서도 다른 set!set은 원하는 key를 신속하게 찾고, 또 이 key가 정렬되기를 원할 때 사용한다. (여기서 key는 저장할 자료) map과 비슷하지만 다른 점은 map은 key값과 value값을 한 쌍으로 저장하지만 set은 key만! 저장한다!
헤더파일 : 원 형 : set< key 자료형 > 변수이름; set< int > set1; map과 사용방법은 비슷하나, set은 key만 저장한다!위에서 key로 int타입을 사용했다.set은 map과 같이 기본적으로 오름차순으