본문 바로가기

프로그래밍 공부/C++ 프로그래밍5

[C++ 기초] STL priority_queue 템플릿 클래스 STL priority_queue 템플릿 클래스 std::priority_queue 클래스는 헤더 내에 포함된 컨테이너로, 비선형 자료 구조 중의 하나인 우선순위 큐(priority queue) 역할을 하는 컨테이너이다. 우선순위 큐는 종종 알고리즘 문제를 해결하기 위해 쓰이는데 힙(heap) 트리를 직접 만들어 구현할 수도 있으나, 편의상 매번 해당 자료 구조들을 직접 구현하는 것이 번거로워 STL에서 제공하는 템플릿 클래스 사용법을 정리해놓으려고 한다. // std::priority_queue 클래스의 템플릿 매개변수 template _Ty : 일반화 된 자료형. _Container : 임의 접근.. 2023. 5. 30.
[C++ 기초] 부동소수점 표기법(Floating-Point Arithmetic) 부동소수점 표기법(floating-point arithmetic) 부동소수점 표기법이란, 실수(real number)를 고정 정밀도(precision)를 가지는 유효숫자(significand)와 어떠한 밑(base)의 거듭제곱과 곱한 형태로 근사적으로 나타내는 표기법이다. 이때 밑은 일반적으로 진법(numeral system)에 따라 정한다. 고정소수점 표기법: \(12.345\) 부동소수점 표기법: \(12345 \times 10^{-3}\), \(1.2345 \times 10^{1}\) 등 여러 가지로 표현 가능 위의 예시에서와 같이 고정소수점 표기법으로 12.345로 나타내어지는 실수는 부동소수점 방식으로 표현할 때 이론상 무수히 많은 경우의 수로 나타내어질 수 있다. 이처럼 같은 수여도 지수의 값.. 2023. 5. 23.
[C++ 기초] 표준 입출력 스트림(Stream)의 동기화 및 입출력 속도의 최적화 표준 입출력 스트림, 스트림 객체 표준 입출력 스트림이란, 컴퓨터 프로그램과 입출력 장치(키보드나 마우스 / 모니터 등) 사이에 입출력 데이터를 바이트의 흐름의 형태로 전송하기 위해 미리 연결되어 있는 통로이다. C와 C++에는 이러한 입출력 스트림과, 해당 스트림을 관리하기 위한 스트림 객체가 존재한다. C: stdin(입력), stdout(출력), stderr(에러) C++: cin(입력), cout(출력), cerr(에러), clog(로그) (+ wcin, wcout, wcerr, wclog) 기본적으로 C와 C++의 표준 입출력 스트림 사이에는 각각 입출력 연산 후 동기화를 수행하도록 설정되어있고, C의 표준 입출력 스트림이 사용하는 버퍼(buffer)를 C++의 표준 입출력 스트림들도 같이 사용.. 2023. 5. 13.
[C++ 기초] 반복문(Loop Statement)과 스택 프레임(Stack Frame), 배열 형식과 STL 컨테이너 오늘자 코딩 문제를 풀던 중 반복문을 이용하여 char 배열에 입력 데이터(문자열)를 저장하고 이를 STL vector 클래스의 요소로 저장하려는 과정에서, 배열을 요소로 직접 컨테이너에 넣을 수가 없어 char* 형의 요소를 가지는 vector를 선언하여 해결해보려 했는데 이것 때문에 오류가 발생하였다. * STL의 컨테이너는 배열로 선언된 데이터를 요소로 가질 수 없다(아래의 2) 참고). // 문제의 코드 #include #include int main() { int N = 10; std::vector Pokemons; while (N--) { char pokemon[21] = { 0, }; scanf("%s", pokemon); Pokemons.push_back(pokemon); } for (co.. 2023. 5. 10.
[C++ 기초] 람다 표현식(Lambda Expression)과 클로저(Closure) 람다 표현식(lambda expression)C++11 이상에서 지원하는 기능으로, 람다 표현식(또는 람다 함수, 람다)은 함수에 인수로 호출되거나 전달되는 위치에서 익명 함수 개체(클로저, closure)를 정의할 수 있는 기능이다.  캡처(capture): 람다가 선언된 스코프에 있는 변수를 참조(&) 또는 값(=)으로 복사하여 사용할지의 여부를 정한다. 디폴트를 사용하는 경우([=] 또는 [&]) 람다 본문에 선언되어있는 외부 변수만 캡처된다. 필요에 따라서 람다 외부의 변수명을 명시하여 해당 변수에 대해서만 참조나 값으로 캡처하는 방식을 지정할 수 있다. 람다 외부의 로컬 변수를 참조로 캡처하는 경우, 클로저의 수명이 로컬 변수의 수명보다 오래 지속될 수 있어 액세스 위반(댕글링, dangling.. 2023. 5. 10.