목록전체 글 (887)
치춘짱베리굿나이스
SFINAE Substitution Failure Is Not An Error 의 줄임말이다 Substitution (치환) Failure (실패) is Not An Error (는 오류 아님) 뭐 이런 두루뭉술한 말이 다 있지? 단어 뜻만 봐서는 도대체 무슨 말인지 모르겠다 그러므로 공부가 필요하다… cppreference says: SFINAE "Substitution Failure Is Not An Error" This rule applies during overload resolution of function templates: When substituting the explicitly specified or deduced type for the template parameter fails, th..
stack 는 무엇인가 #include int main(void) { std::stack stack1; // 정수형 컨테이너, 용량 0으로 초기화 std::stack stack2(5); // 문자열 컨테이너, 용량 5로 초기화 } 보통 자료구조를 배우다 보면 배열과 연결 리스트를 배운 뒤 스택, 큐를 필수적으로 다루게 된다 그 때 배운 그 스택이 맞다! 입출구가 단 하나인, LIFO (Last in First Out) 속성의 그 스택이다 LIFO 에서 알 수 있듯이, 스택은 요소를 넣을 수 있는 입구가 제한적이고, 그 말인 즉슨 스택을 구현할 때는 원소를 중간에 끼워넣거나 중간의 원소를 삭제하는 등의 연산을 고려할 필요가 없다는 뜻이다 벡터의 구현에 비하면 굉장히 짧은 구현량을 가지고 있다 (아싸) 눈여..
Vector 는 무엇인가 #include int main(void) { std::vector vect1; // 정수형 컨테이너, 용량 0으로 초기화 std::vector vect2(5); // 문자열 컨테이너, 용량 5로 초기화 } 이전에 우리가 C에서 사용하던 배열은 고정된 길이만큼만 선언 및 할당해 놓고 그 제한 안에서 사용하는 형태의 컨테이너였다 벡터는 거기에서 한 단계 더 나아가, 원소를 추가할 때마다 이전에 할당한 용량이 부족하다면 → 메모리를 재할당하여 용량을 자동으로 늘려주는 신기한 컨테이너다 그 말인 즉슨, 처음에 벡터를 선언할 때 원소의 개수가 몇 개 들어올 지 모른다면 그냥 0개로 초기화해 주어도 원소를 추가할 때마다 알아서 메모리를 새롭게 할당한다는 뜻이다 더이상 내가 malloc 하..
Allocator 클래스 컨테이너를 하기 위해 필수로 알아야 하는 클래스이다 앞의 반복자 파트에서는 전혀 쓸 일이 없었지만 벡터나 스택 같은 컨테이너들은 기본적으로 메모리 할당을 하고 그 안에 요소들을 저장해야 하며, 내부 메서드에서 메모리 일부 할당 및 해제가 잦기 때문에 Allocator의 사용법을 반드시 익혀야 한다 뭐 하는 녀석인지 C/C++에서는 메모리 관리를 위해서 malloc, calloc, free … 와 new, delete를 사용했었다 특정 변수를 위한 메모리를 할당하고자 한다면 이 함수들이 편리하지만, 직접 컨테이너를 구현할 때 (ft_containers 처럼) 는 이야기가 달라진다 컨테이너 내부에서는 특정 메서드를 호출할 때마다 일정 영역만 메모리를 해제하거나 재할당하는 등 다양하고..
먼저 읽어보고 오세요 [Rank 5] ft_containers - std::iterator_traits [Rank 5] ft_containers - std::iterator_traits std::iterator_traits namespace ft { template struct iterator_traits { // template로 가져온 클래스에서의 :: 값은 typename으로 가져와야 한다 typedef typename Iter::difference_type difference_type; typedef typename Iter::value_type value_t blog.chichoon.com iterator_category 에서 양방향 반복자와 임의접근 반복자가 무엇인지 간단하게나마 알고 오면 조..
explicit 서론 ft_containers의 오랜 친구 cplusplus.com 과 cppreference.com 을 보다 보면? 생성자 등등에 explicit 이라는 키워드를 자주 볼 수 있다 나는 C++ 이 주 언어가 아니라서 이게 어디다 쓰는 키워드인지 전혀 몰랐는데!! 과제를 하겠다고 무작정 따라 칠 수만은 없는 노릇이다 따라서 잊어버리기 전에 적어두려고 한다 (매우 짧음 주의) 뭐하는 친구인가 explicit은 ‘명백한, 분명한’ 이라는 의미의 영단어이다 무엇을 분명하게 만들어 주는 키워드라는 것을 짐작할 수 있다 C++ 에서의 묵시적 형변환 [Rank 4] CPP 06 CPP Module 06에서 공부했던 묵시적 형변환에 관해서 잠깐 보고 가자 그렇다고 한다 요약하자면 묵시적 형변환이란? ..
std::iterator_traits namespace ft { template struct iterator_traits { // template로 가져온 클래스에서의 :: 값은 typename으로 가져와야 한다 typedef typename Iter::difference_type difference_type; typedef typename Iter::value_type value_type; typedef typename Iter::pointer pointer; typedef typename Iter::reference reference; typedef typename Iter::iterator_category iterator_category; // iterator의 특성 };뭐하는 친구인가요 반복자 특..