---C++ 역량 강화---/STL 공부 31

deque

[[[원리 분석]]] sequence, random_access하다. But contiguous하지 않다.배열과 포인터를 사용하여 연결한 컨테이너다.포인터를 추가로 갖고있기 때문에 벡터보다 메모리 공간을 더 차지한다.시작과 끝에 삽입, 삭제를 하거나 random_access할 때 비용이 O(1)이다.중간 삽입, 삭제는 O(N)이다.시작과 끝에 삽입, 삭제가 빈번히 일어날 때 사용하면 좋은 컨테이너다.16바이트만큼 연속적인 공간을 할당받고 나서 다른 주소로 이동한다.다른 주소도 16바이트 만큼 연속적인 공간을 할당받는다.결론: 배열과 포인터의 혼합 사용 [[[왜 맨 처음과 맨 끝의 삽입 삭제가 O(1)일까?]]]위 그림 처럼 deque는 연속적인 배열 블록과 포인터로 구성되어있다.맨 끝에 삽입 삭제가 O(..

set_intersection

[[[문제]]]컨테이너1에 들어있는 원소들과 컨테이너2에 들어있는 원소들을 비교하여 동일한 원소가 있다면 화면에 출력하라 [[[원리 분석]]]1. 비교할 컨테이너들의 begin, end2. 목적지 [[[소스 코드]]]#include 1. 두 컨테이너를 비교하려면 정렬을 해야 한다.2. back_inserter로 넣은 이유는 set_intersection의 내부적 기능 때문이다.++연산자로 다음 주소로 이동하여 값을 넣기 때문에, size는 증가하지 않는다.size를 증가시키지 않았기 때문에 range based for문으로 출력할 수 없다.cout로도 출력 불가능.  back_inserter를 사용하지 않고 목적지를 설정했을 때를 살표보자 출력되지 않는다.출력되지 않는다고 값이 저장되지 않았다는 것은 아..

총 정리

[programming language]- oop: object oriented programmingclass를 사용한 객체 프로그래밍모델링하고자 하는 대상을 하나의 자료형으로 표현- gpl: generic programming languagestl를 사용한 프로그래밍- fpl: function programming language마지막에 배웠던 concept이 fpl중 하나 [special function]- 기본 생성자- 소멸자- 복사 생성자- 복사 대입 연산자- 이동 생성자- 복사 할당 연산자 [RAII]래핑 클래스를 만들고 생성자로부터 자원을 받아와서 사용자원은 래핑 클래스 객체가 소멸될 때 자동으로 소멸자원은 래핑 클래스 객체와 생명 주기를 같이 한다.실수로 delete를 안해서 메모리 릭이 생..

concept을 이용한 my_distance 구현

[[[문제]]] : concept을 이용한 my_distance 구현 이전에 메타프로그래밍 type_traits: is_same_v를 이용하여 선택적 컴파일에 대해 포스팅을 했었다.이번엔 그것을 concept을 이용하여 프로그래밍 해보겠다. [[[복습]]]https://koreatopclass.tistory.com/31  [[[concept를 이용]]]https://koreatopclass.tistory.com/33  메타프로그래밍, typetraits, concept에 대한 개념을 처음 공부할 때는 정말 어지러웠는데공부한 후로는 꽤 익숙해졌다.

[c++20] ranges, view

쉽지 않은 파트다. 양도 많다.이 개념을 제대로 이해하기 위해서는 템플릿 메타프로그래밍, type traits, concept에 대한 공부가 필요하다.https://koreatopclass.tistory.com/31https://koreatopclass.tistory.com/32https://koreatopclass.tistory.com/33 [[[개념]]]ranges 라이브러리는 알고리즘들 + 반복자 라이브러리를 확장시키고, 일반화 시켰다,또한 이것들을 조합 가능하게 만들고, 에러가 적게 발생하도록 만들었다.그 결과 이것들은 더 강력해졌다.range 알고리즘들은 concept으로 재 작성되었다.range 라이브러리는 range 알고리즘들을 표함한다. [[[이전 함수와 ranges::함수가 정말 다른지 ..

사용자 정의 리터럴 접미사

[[[C++ 표준 라이브러리에서 제공하는 사용자 정의 리터럴 접미사]]]문자열 리터럴const char* str을 스트링 객체로 만들었다.따라서 문자열 합치기가 된다.string 객체가 존재해야 +operator을 호출하여 문자열을 합칠 수 있다. [[[직접 만들어 보자]]]1. constexpr 키워드가 사용된 operator "" _s함수는 사용자 정의 리터럴 접미사를 정의한다. 2. const char* 뿐만 아니라 size 인자로 받는다. 부동 소수점을 int로 변환시키는 사용자 정의 리터럴 접미사를 만들어 보려고 했다.1. 만들 수 없는 이유는 constexpr 함수는 컴파일 시점에서 호출되는데 float는 런타임 때 메모리에 저장되기 때문이다.따라서 컴파일 시간에 평가할 수 있는 정수, 문자열..

[c++20] concept

[[[type traits와의 차이]]]둘 다 컴파일 타임에서 조건을 주고, 조건에 따라 코드를 조작한다는 점이 비슷하다고 생각해서 찾아봤다.type traits는 받아온 인자의 타입을 가지고 컴파일 타임에서 코드를 조작하고 생성 변경 등을 하는 것이 목적이다.concept는 템플릿변수에 대한 제약조건을 만든다.또한 여러 함수들을 오버로딩 해놓는데, 인자로 들어온 매개 변수들은 만들어놓은 제약 조건에 따라서 알맞는  함수가 호출된다.1. 템플릿 매개변수의 타입에 제약 조건을 건다.2. 제약 조건에 따른 함수가 호출될 수 있도록 오버로딩 한다.3. 컴파일 타임에서 concept을 검사하여 의도에 맞지 않으면 빨간줄을 그어준다.오류를 친절히 알려준다. ==중요==type traits 없이는 concept를 ..

템플릿 메타프로그래밍

[[[정의]]]템플릿을 사용하여 컴파일 타임에 코드를 생성하고 변형하여 프로그램을 조작하는 기술 이런식으로 정의를 외우면 금방 까먹을테고, 다음과 같이 기억하자컴파일 시점에는 작성된 코드를 가지고서 exe파일을 만들고, 런타임 때 코드를 실행하는데메타프로그래밍 기술을 사용하면 컴파일 시점에서 코드를 비교 생성 조작 결정 등등 할 수 있다. 컴파일 타임: 소스코드를 읽고 구문 분석하고 타입과 구조를 파악하고 코드를 생성한다.if문이 있으면 결과가 true든 false든 관심 없고 소스코드 전체를 검사한다. 컴파일 타임에서 템플릿으로 작성된 함수를 어떻게 생성할까예를들어 내가 template void function(T v1, T v2)라는 템플릿 함수를 만들었다고 하자.main함수에 vector v, li..

distance

[[[원리 분석]]]반환값에 주목해보자. ptrdiff_t이다.ptrdiff_t는 c, c++에서 사용되는 데이터 타입이다.두개의 배열 혹은 포인터 사이의 거리(차이)를 나타내는데 사용된다.부호 있는 정수이다.long long이다. [[[관찰]]]정말 ptrdiff_t를 return할까? first와 last의 주소를 바꿔보자관찰 결과: last - first라는 것을 확인할 수 있다. 참고: v.end는 5가있는 위치가 아니라 그 다음 위치이다. vector 말고 list의 결과도 확인해 보자first = begin, last = end일 때는 동일하다.first = end , last = begin 일 때는 다르다.결론: vector일 때, list일 때 동작 방식이 다르다. 어떻게 다른거지? ==l..

copy

[[[원리 분석]]]STL알고리즘은 non - modifying(read), modifying(read, write), sort and related(order)로 나눌 수 있는데그 중 modifying 알고리즘이다.시작, 끝, 목적지 [[[관찰]]]복사 당할 녀석은 시작과 끝의 위치를 모두 알려줘야 하지만목적지는 시작 위치만 알려줘도 된다. ==함수 구현==이런식으로 목적지는 자동으로 한칸씩 앞으로 이동하게 구현하면 가능하다.목적지를 화면으로 해보자. " - "는 구분자이다.목적지가 화면에 cursor(깜빡깜빡거리는 그거)의 시작 위치로 지정되고 마찬가지로 한칸씩 앞으로 이동하며 복사된다.출력 반복자라고 한다.똑같이 내가 만든 my_copy 함수를 사용하여 실행한 결과이다. ==가지고 놀아보자==내 자..