Programming
-
_C++_입출력 스트림Programming/_C++ 2023. 9. 26. 16:21
C++은 C의 super set이기 때문에 C에서 사용하던 로우 레벨 입출력 함수들을 사용할 수 있다. 그러나 에러 처리가 완전하지 않고 커스텀 데이터 타입을 다룰 수 없다는 한계가 존재한다. C++은 스트림이라 불리는 유연하고 객체지향적인 I/O 시스템을 제공한다. 스트림 개념은 데이터를 받거나 생성하는 객체라면 모두 적용할 수 있으며, 대표적으로 콘솔 스트림, 파일 스트림, 문자열 스트림이 있다. 우리가 자주 사용하는 은 인클루드만 해도 메모리 사용량을 증가시키는데, 이는 cin, cout, cerr, clog와 같은 스트림 객체가 자동으로 인스턴스화 되기 때문이다. 출력 스트림을 이용하는 가장 기본적인 방법은 > s; } 위으 코드를 살펴보면 수, 문자열 입력이 미리 알 수 없는 순서로 발생하는 시..
-
_C++_반복자Programming/_C++ 2023. 9. 25. 21:56
C++은 템플릿 기반의 컨테이너(자료구조)를 제공하고 컨테이너 항목들에 범용적인 접근 방복을 제공하기 위해 반복자 패턴을 사용하고 있다. 각 컨테이너는 그 컨테이너만의 반복자를 지원한다. 반복자는 특정 컨테이너의 항목을 어떻게 순회할지 알고 있는 포인터 객체이다. 포인터 객체는 C++ 표준에서 정하고 있는 공용 인터페이스를 따르고 있으며 일관된 방법으로 각 컨테이너를 순회할 수 있도록 해준다. C++ STL에 포함된 알고리즘들 또한 대부분 반복자들을 파라미터로 받아 작동하며, 각 컨테이너의 구조에 종속되지 않게 구현이 된다. C++ 표준에서 반복자의 카테고리 분류 반복자 기능 입력 반복자 출력 반복자 순방향 반복자 양방향 반복자 임의 접근 반복자 접근(operator→) O X O O O 읽기(opera..
-
_C++_연관 컨테이너_비순차 연관 컨테이너Programming/_C++ 2023. 9. 25. 19:23
STL 연관 컨테이너 연관 컨테이너는 Key와 Value를 연관시켜 데이터를 관리한다. 데이터의 정렬상태를 항상 유지함. (삽입, 삭제, 룩업 성능이 모두 동일하게 로그 시간복잡도를 가짐.) 내부적으로 균형잡힌 이진 탐색 트리를 구현하고 있으나 트리는 직접 접근 불가. 표준 연관 컨테이너는 다음과 같이 네 종류가 있다. set: Key 자체가 Value이며 중복 Key를 허용하지 않음. multiset: set처럼 Key가 Value이며 중복 Key를 허용. map: Key와 Value가 별개이며 중복 Key를 허용하지 않음. multimap: Key와 Value가 별개이며 중복 Key를 허용. 모두 템플릿 파라미터 비교 클래스가 있으며 디폴트 비교 클래스를 사용하려면 항목에 operator class ..
-
_C++_알고리즘_Part_2Programming/_C++ 2023. 9. 25. 14:41
비교 알고리즘 항목열 간 비교를 하기 위해 equal, mismatch, lexicographical_compare 함수 중 하나를 선택하여 사용하면 된다. equal, mismatch는 첫 컨테이너에 대해 두 개의 반복자를 필요로하며 두 번째 컨테이너에 대해서는 끝 반복자를 선택적으로 받는다. 두 번째 컨테이너의 시작 반복자만 제공한 경우에는 첫 번째 항목열의 크기만큼만 비교한다. (비교에 사용할 함수를 함수 객체로 전달하여 커스텀이 가능하다.) 비교알고리즘 대신 operator==, operator
-
_C++_TemplateProgramming/_C++ 2023. 9. 24. 23:20
템플릿은 C++ 의 일반화된 코드를 남드는 강력한 도구이다. 대상에 대한 타입만 다르고 로직이 다르지 않다면 템플릿으로 단순한 반복 작업으로 함수나 클래스를 만들 수 있다. 예를 들어 int type에 대한 더하기 함수, double type에 대한 더하기 함수 두가지가 있다면, 템플릿으로 형태를 만들어서 두 형식의 함수를 만들 수 있다. 기본적인 구조는 다음과 같다. template class Samlple { Sample(const Sample& src) = default; //const Sample&는 파라미터 타입의 예시 //... }; //함수 템플릿 template void f(const T& param); //const T&는 파라미터 타입의 예시 T는 아직 정해지지 않는 타입이며, T는 컴..
-
_C++_컨테이너 어댑터와 비트셋 컨테이너Programming/_C++ 2023. 9. 20. 19:09
컨테이너 어댑터 컨테이너 어댑터는 순차 컨테이너를 바탕으로 인터페이스를 다르게 래핑한 것을 말한다. 컨테이너 어댑터의 목적은 보다 단순화된 인터페이스를 제공하는 것이다. 기본적으로 다음 세 가지가 있다. queue priority_queue stack 1. queue queue는 헤더에 정의된 표준적인 선입선출(FIFO) 시멘틱을 구현한다. 다음과 같은 템플릿 정의를 갖는다. template class queue; deque 컨테이너를 기본 값으로 가지고 있으며, list도 사용할 수 있다. queue는 다음과 같이 생성할 수 있다. #include #include #include using namespace std; int main(){ queue q1; // 일반적인 생성방법. // deque를 참조..
-
_C++_lambdaProgramming/_C++ 2023. 9. 20. 18:02
람다(lambda)는 익명의 함수를 정의하는 표현식을 의미한다. 람다를 통해 클로져(Closure) 클래스가 정의됨. 람다는 캡처(capture), 인자(parameter), 반환형(return type), 몸통(body)로 구성되었다. //case 1 auto f = [captures](parameters) -> return type { body /* captures: 캡처들이 들어감 parameters: 함수의 인자들이 들어감 return type: 함수의 반환형 body: 함수의 몸통 */ } //case 2 #include function g = [](int param) { //function 템플릿을 사용하여 형식 지정이 가능하다. }; 위의 두 구조중 1번 구조가 효과적이다. 내부를 알 수 없..