목록Tutorials/C++ : Beginner (46)
KoreanFoodie's Study
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! STL algorithm STL algorithm 라이브러리는 STL 자료구조를 다루는 데 필요한 편리한 메소드들을 제공하고 있다. STL 알고리즘 라이브러리에 있는 함수들은 대체로 다음과 같은 두 가지 형태를 띄고 있다. template void do_something(Iter begin, Iter end); template void do_something(Iter begin, Iter end, Pred pred); 두 번째의 Pred 는 일반적으로 bool 을 리턴하는 함수 객체(Funtor) 가 전달된다. 정렬 (sort, stable_sort, partial_sort 정렬은 ..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 연관 컨테이너 (Associative Container) 연관 컨테이너는 Key - Value 구조를 가진 컨테이너를 의미한다. set 은 key 값만 가지고 만든 집합이고, map 은 key-value 페어를 이용한다. multiset 은 중복값을 허용하는 set, multimap 은 중복 키값을 허용하는 map 이다. set template void print_set(std::set& s) { // 셋의 모든 원소들을 출력하기 std::cout
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! C++ 표준 템플릿 라이브러리 (STL : Standard Template Library) STL 은 다음과 같은 세 개의 라이브러리들을 의미한다. Container : 임의 타입의 객체를 보관 Iterator : 컨테이너에 보관된 원소에 접근할 수 있는 지정자 Algorithm : 반복자들을 가지고 일련의 작업을 수행 Container 컨테이너에는 배열처럼 객체들을 순차적으로 보관하는 시퀀스 컨테이너(sequence container) 와 키를 바탕으로 대응되는 값을 찾아주는 연관 컨테이너(associative container) 가 있다. 먼저 시퀀스 컨테이너의 경우 vector..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! TMP를 이용한 소수 판별 프로그램 컴파일러는 구조상 어떠한 식별자를 보았을때 '값'인지 '타입'인지 결정을 해야 한다. 다음의 예시를 보자. template int func() { T::t* p; } class A { const static int t; }; class B { using t = int; }; 위에서, 클래스 A 에 대해 func 함수를 특수화한다면, t 가 어떠한 int 값이 되어 T::t* p; 가 단순히 클래스 A 의 t 와 p 를 곱하는 식으로 해석이 된다. 반면, func 함수가 클래스 B 에 대해 특수화 된다면, T::t* p; 는 int 형 포인터 p 를..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 템플릿 클래스 인스턴스는 같은 타입일까? 템플릿 클래스로 만든 두 클래스에서 인자만 바꾼다면, 해당 인스턴스들은 같은 타입일까? 다음 코드를 보자. #include #include template class Array { T data[N]; public: Array() {} Array(T (&arr)[N]) { for (int i = 0; i < N; ++i) { data[i] = arr[i]; } } T* get_array() { return data; } int size() { return N; } void print_all() { for (int i = 0; i < N; ++i..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 가변 길이 템플릿 C++ 템플릿을 이용하면 파이썬처럼 임의의 갯수의 인자를 받는 함수를 구현할 수 있다. #include template void print(T arg) { std::cout
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! C++ 템플릿 도입 아래와 같은 벡터 클래스를 만들었다고 하자. class Vector { int* data; int capacity; int length; public: Vector(int n) : data(new int[n]), capacity(n), length(0) {} void push_back(int input); void remove(int index); int size() { return length; } void print_data() { for (int i = 0; i < n; ++i) { std::cout
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! fstream 파일 스트림클래스 fstream을 상속받아 istream과 ostream을 입출력 클래스로 사용하자. std::ifstream in("test.txt"); std::string s; if (in.is_open()) { in >> s; std::cout
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! C++ 입출력 라이브러리 C++ 입출력 클래스는 ios_base를 기반으로 하며, 스트림의 입출력 형식 관련 데이터를 처리한다(정밀도, 10진수/16진수 등 결정). ios 클래스에서는 실제로 스트림 버퍼를 초기화하고 입출력 작업의 상태를 처리한다(파일의 끝에 도달했을 경우 eof 함수 호출, good 함수 호출로 입출력 작업 체크) istream 클래스 istream은 실제로 입력을 수행하는데, operator>>가 istream 클래스에 정의된 연산자이다. 또한 cin은 istream 클래스의 객체 중 하나이다. cin은 엔터나 공백을 입력 시에 무시해 버린다. 또한, opera..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! vitrual 소멸자와 메모리 누수 사실 virtual 소멸자를 사용하는 이유는, 메모리 누수(memory leak)을 막기 위해서이다. 다음 예제 코드를 보자. class parent { public: parent() { std::cout