---C++ 역량 강화--- 38

deque

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

[STL] 연습 문제

[문제1]: 벡터에 정수를 입력받고 오름차순으로 정렬한 후 출력하는 프로그램을 작성하세요 [문제2]: 맵을 이용한 단어 빈도 수 계산사용자로부터 여러 단어를 입력받아 각 단어가 몇 번 입력되었는지 계산하는 프로그램을 작성하세요. [문제3]: 세트 중복 제거 사용자로부터 정수를 입력받고, 중복을 제거하여 유일한 정수들만 출력하는 프로그램을 작성하세요. [문제4]: 큐를 이용한 프린터 대기열 시뮬레이션 프린터 대기열을 시뮬레이션하는 프로그램을 작성하세요. 문서가 큐에 추가되고, 큐에서 문서를 출력하는 작업을 시뮬레이션합니다. [문제5]: 스택을 이용한 괄호 검사사용자가 입력한 문자열에서 괄호의 짝이 맞는지 검사하는 프로그램을 작성하세요. 괄호는 (), {}, []를 포함합니다.ex) {(Hello Every..

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 Style 배열 혹은 std::Array

[[[서론]]]어제 다녀온 개발자 모임에서 내가 array를 사용하는 것을 보고 일반 배열과 똑같은데 array를 사용하는 이유가 있는지 질문을 받았다."array가 더 안전하다고 들었기 때문에"라는 막연한 이유 뿐이었고, 따라서 대답을 얼버부렸다.제대로 된 이유를 알지 못하고 사용한 댓가였다.앞으로는 무엇을 할 때 확실한 이유를 가지고 하자 라는 반성을 하게 되었다.질문하신 분은 at을 사용해서 범위 검사를 하기 때문인가? 하고 유추했고하지만 그게 굳이 이유가 되나? 라고 스스로 답했다. 신기하게도 오늘 학교에서 똑같은 주제가 나왔다.C Style 배열과 C++ Style의 std::Array는 거의 비슷하다.메모리에 올라갔을 때 차지하는 용량도 똑같고, 장소도 똑같고 다를게 없다.그럼 왜 std::a..