'공부/C++(STL)'에 해당되는 글 16건

  1. 2018.04.12 priority_queue 컨테이너
  2. 2018.04.10 queue 컨테이너
  3. 2018.04.05 stack 컨테이너
  4. 2018.04.03 forward_list 컨테이너
  5. 2018.04.02 list 컨테이너
  6. 2018.03.30 deque 컨테이너
  7. 2018.03.29 vector 컨테이너
  8. 2018.03.23 array 컨테이너
  9. 2018.03.01 람다 식(익명함수)
  10. 2018.02.23 스마트 포인터
posted by 구로보루 2018. 4. 12. 19:34

 우선순위 큐는 기본은 선입선출 방식의 큐 컨테이너이지만 항상 조건에 따라 정렬된 순서로 담아두는 큐이다. 가령 내림차순이 조건이라면 선입선출의 방식에 따라 항상 가장 앞에 있는 제일 큰 원소를 접근하게 된다. 

 

priority_queue<T, Container = vector<T>, Compare = less<T>>

T : 원소의 타입

Container : 우선순위 큐를 구현하는 데 사용되는 기본 형식으로 생략하면 vector가 된다.

Compare : 기본 순서 조건자로 less<T>는 내림차순 정렬이다.

-> 큐는 컨테이너 어뎁터이기 때문에 front, push_back, pop_front, empty, size 연산만 할 수 있다면 어떤 컨테이너라도 지정할 수 있다.

 

※ 컨테이너 어뎁터 : 순차열 컨테이너를 다른 기능을 제공하는 컨테이너로 정의하기 위해 래핑하는 클래스 템플릿

 

 멤버 함수

 push

 원소를 삽입. 정해진 위치에 넣기 위해 정렬연산이 동작

 emplace

 윈소를 내부에서 생성해 삽입. 정렬연산 동작

 top

 우선순위 큐의 첫 번째 원소 참조 반환

 pop

 우선순위 큐의 첫 번째 원소 제거

 size

 우선순위 큐에 있는 원소의 개수 반환 

 empty

 우선순위 큐에 원소가 없으면 true 반환

 swap

 두 컨테이너의 모든 원소 교환

'공부 > C++(STL)' 카테고리의 다른 글

queue 컨테이너  (0) 2018.04.10
stack 컨테이너  (0) 2018.04.05
forward_list 컨테이너  (0) 2018.04.03
list 컨테이너  (0) 2018.04.02
deque 컨테이너  (0) 2018.03.30
posted by 구로보루 2018. 4. 10. 14:08

 큐는 선입선출 방식의 컨테이너로 새 원소는 뒤에만 추가되고 앞에서부터 제거할 수 있는 컨테이너이다.

 

queue<T, Container = deque<T>>

T : 원소의 타입

Container : 큐를 구현하는 데 사용되는 기본 형식으로 생략하면 deque가 된다.

-> 큐는 컨테이너 어뎁터이기 때문에 front, back, push_back, pop_front, empty, size 연산만 할 수 있다면 어떤 컨테이너라도 지정할 수 있다.

 

※ 컨테이너 어뎁터 : 순차열 컨테이너를 다른 기능을 제공하는 컨테이너로 정의하기 위해 래핑하는 클래스 템플릿

 

 멤버 함수

 front

 큐에 첫 번째 원소 참조 반환

 back

 큐에 마지막 원소 참조 반환

 push

 큐의 끝에 원소 추가. 기반 컨테이너의 push_back함수 사용

 pop

 큐에서 첫 번째 원소 삭제

 size

 큐에 있는 원소의 개수 반환 

 empty

 큐에 원소가 없으면 true 반환

 emplace

 규의 끝에 원소를 내부에서 생성에 추가

 swap

 두 컨테이너의 모든 원소 교환

'공부 > C++(STL)' 카테고리의 다른 글

priority_queue 컨테이너  (0) 2018.04.12
stack 컨테이너  (0) 2018.04.05
forward_list 컨테이너  (0) 2018.04.03
list 컨테이너  (0) 2018.04.02
deque 컨테이너  (0) 2018.03.30
posted by 구로보루 2018. 4. 5. 19:08

 스텍은 후입선출 방식의 컨테이너로 원소들이 차곡차곡 쌓이고 뺄때는 위에서 부터 빼는 형식의 컨테이너이다.

 

stack<T, Container = deque<T>>

T : 원소의 타입

Container : 스택을 구현하는 데 사용되는 기본 형식으로 생략하면 deque가 된다.

-> 스택은 컨테이너 어뎁터이기 때문에 back, push_back, pop_back, empty, size 연산만 할 수 있다면 어떤 컨테이너라도 지정할 수 있다.

 

※ 컨테이너 어뎁터 : 순차열 컨테이너를 다른 기능을 제공하는 컨테이너로 정의하기 위해 래핑하는 클래스 템플릿

 

 멤버 함수

 top

 스택 상위에 있는 원소를 참조 반환

 push

 스택 상위에 원소 삽입, 기반 컨테이너의 push_back함수 사용

 pop

 스택 상위에 원소 삭제

 size

 스택에 있는 원소의 개수 반환

 empty

 스택이 비어있으면 true 반환

 emplace

 스택 상위에 원소를 내부에서 생성해 삽입

 swap

 두 컨테이너의 모든 원소 교환

 

'공부 > C++(STL)' 카테고리의 다른 글

priority_queue 컨테이너  (0) 2018.04.12
queue 컨테이너  (0) 2018.04.10
forward_list 컨테이너  (0) 2018.04.03
list 컨테이너  (0) 2018.04.02
deque 컨테이너  (0) 2018.03.30
posted by 구로보루 2018. 4. 3. 21:00

 forward_list는 단일 연결리스트로 된 가변 순차열이다. list와는 다르게 단일로 연결되어 있기 때문에 역방향 반복자나 순차열의 맨 마지막인 back 함수를 사용할 수 없다.

 

forward_list<T>

T -> 원소의 타입

 

 멤버 함수

 begin

 시작 반복자를 반환

 end

 끝 반복자를 반환

 cbegin

 const 시작 반복자를 반환

 before_begin

 첫 번재 원소의 하나 앞을 가르키는 반복자 반환

 cbefore_begin

 첫 번째 원소의 하나 앞을 가르키는 const 반복자 반환

 cend

 const 끝 반복자를 반환

 assign

 내용을 새 원소들로 대체

 operator=

 원소들을 다른 컨테이너의 원소들이나 초기화 리스트로 대체

 max_size

 원소들의 최대 개수 반환

 resize

 원소들의 개수 변경

 empty

 원소가 없으면 true 반환

 front

 첫 번째 원소 참조 반환

 push_front

 순차열의 시작에 원소를 추가

 emplace_after

 지정된 위치 뒤에 내부에서 원소를 생성

 emplace_front

 순차열의 시작에 내부에서 원소를 생성

 insert_after

 지정된 위치 뒤에 하나 이상의 원소를 추가

 pop_front

 순차열의 시작에서 원소 제거

 reverse

 원소들의 순서를 거꾸로 바꿈

 erase_after

 지정된 위치 뒤에 원소 하나 또는 범위로 지정된 원소들 제거

 remove

 전달된 인수와 일치하는 원소들을 제거

 remove_if

 단항 조건자 인수가 true를 반환하는 원소들을 제거

 unique

 연속되어 중복된 원소를 제거

 clear

 모든 원소를 제거하고 size는 0으로

 swap

 두 컨테이너의 모든 원소 교환

 sort

 원소들을 정렬

 merge

 두 컨테이너 병합 (모두 오름차순 정렬된 상태)

 splice_after

 지정된 위치 뒤에 타입이 같은 다른 리스트 삽입

 

* insert, emplace : insert의 경우 원소를 삽입하기위해 임시로 객체를 생성하지만 emplace의 경우 임시로 객체를 생성하지 않는다.

 

* sort : 인수가 없을 경우 오름차순으로 정렬한다. 인자로 비교하는 조건을 정의한 람다식이나 함수 객체를 인수로 받을 수 있다. std::greater<T>()를 인수로 전달하면 내림차순 정렬.

 

* merge : 모든 리스트의 원소들을 오름차순으로 병합한다.

'공부 > C++(STL)' 카테고리의 다른 글

queue 컨테이너  (0) 2018.04.10
stack 컨테이너  (0) 2018.04.05
list 컨테이너  (0) 2018.04.02
deque 컨테이너  (0) 2018.03.30
vector 컨테이너  (0) 2018.03.29
posted by 구로보루 2018. 4. 2. 21:20

 list 컨테이너는 이중 연결 리스트로 된 가변 길이 순차열이다. vector, deque와는 다르게 어느 위치라도 O(1)의 시간으로 원소를 삽입할 수 있다.

 

list<T>

T -> 원소의 타입

 

 멤버 함수

 begin

 시작 반복자 반환

 end

 끝 반복자 반환

 rbegin

 역방향 시작 반복자 반환

 rend

 역방향 끝 반복자 반환

 cbegin

 const 시작 반복자 반환

 cend

 const 끝 반복자 반환

 crbegin

 const 역방향 시작 반복자 반환

 crend

 const 역방향 끝 반복자 반환

 assign

 내용을 새 원소들로 대체 

 operator=

 원소들을 다른 컨테이너의 원소들이나 초기화 리스트로 대체

 size

 원소들의 실제 개수 반환

 max_size

 원소들의 최대 개수 반환

 resize

 원소들의 개수 변경

 empty

 원소가 없으면 true 반환

 front

 첫 번째 원소에 대한 참조 반환

 back

 마지막 원소에 대한 참조 반환

 push_back

 순차열 끝에 원소 추가

 push_front

 순차열 시작에 원소 추가

 emplace

 지정된 위치 앞에 내부에서 원소를 생성

 emplace_back

 순차열 끝에 내부에서 원소를 생성

 emplace_front

 순차열 시작에 내부에서 원소를 생성

 insert

 지정된 위치 앞에 하나 이상의 원소를 추가

 pop_back

 순차열의 끝에서 원소를 제거

 pop_front

 순차열의 시작에서 원소를 제거

 reverse

 원소들의 순서를 거꾸로 바꿈

 erase

 지정된 위치에서 원소 하나 또는 범위로 지정된 원소 제거

 remove

 전달된 인수와 일치하는 원소들을 제거

 remove_if

 단항 조건자 인수가 true를 반환하는 원소들을 제거

 unique

 연속되어 중복된 원소를 제거

 clear

 모든 원소를 제거하고 size를 0으로

 swap

 두 컨테이너의 모든 원소 교환

 sort

 원소 정렬

 merge

 두 컨테이너 병합 (모두 오름차순 정렬된 상태)

 splice

 지정된 위치 앞에 타입이 같은 다른 리스트 삽입

 

* insert, emplace : insert의 경우 원소를 삽입하기위해 임시로 객체를 생성하지만 emplace의 경우 임시로 객체를 생성하지 않는다.

 

* sort : 인수가 없을 경우 오름차순으로 정렬한다. 인자로 비교하는 조건을 정의한 람다식이나 함수 객체를 인수로 받을 수 있다. std::greater<T>()를 인수로 전달하면 내림차순 정렬.

 

* merge : 모든 리스트의 원소들을 오름차순으로 병합한다.

'공부 > C++(STL)' 카테고리의 다른 글

stack 컨테이너  (0) 2018.04.05
forward_list 컨테이너  (0) 2018.04.03
deque 컨테이너  (0) 2018.03.30
vector 컨테이너  (0) 2018.03.29
array 컨테이너  (0) 2018.03.23
posted by 구로보루 2018. 3. 30. 13:49

 순차컨테이너로 순차열에 원소를 추가하거나 삭제할 수 있다. vector가 순차열의 끝에 새로운 원소를 추가하거나 삭제한다면 deque는 시작과 끝에서 효율적으로 추가하거나 삭제할 수 있다.

 

deque<T>

T -> 원소의 타입

 

 멤버 함수

 begin

 시작 반복자를 반환

 end

 끝 반복자를 반환

 rbegin

 역방향 시작 반복자를 반환

 rend

 역방향 끝 반복자를 반환

 cbegin

 const 시작 반복자를 반환

 cend

 const 킅 반복자를 반환

 crbegin

 const 역방향 시작 반복자를 반환

 crend

 const 역방향 끝 반복자를 반환

 assign

 내용을 새 원소들로 대체한다.

 operator=

 원소들을 타입이 같은 다른 컨테이너의 원소들이나 초기화 리스트로 대체

 size

 원소들의 실제 개수 반환

 max_size

 원소들의 최대 개수 반환

 empty

 원소가 없으면 true 반환

 resize

 원소들의 실제 개수 변경
 shrink_to_fit

 원소들의 실제 개수에 필요한 메모리를 줄임

 front

 첫 번째 원소 참조반환

 back

 마지막 원소 참조반환

 operator[]

 원소를 인덱스로 접근

 at

 원소를 인덱스로 접근(경계검사)

 push_back  순차열의 끝에 원소를 추가
 insert

 지정된 위치에 원소 하나 또는 원소들을 추가

 emplace

 지정된 위치에 내부에서 원소를 생성해 추가

 emplace_back

 순차열 끝에 내부에서 원소를 생성해 추가

 pop_back

 순차열 끝의 원소를 제거
 erase  원소 하나 혹은 범위로 지정된 원소 제거
 clear

 모든 원소를 제거하고 size를 0으로 변환

 swap

 두 컨테이너의 모든 원소를 교환 

 push_front

 순차열의 시작에 원소를 추가

 pop_front

 순차열의 시작에 원소를 제거

 

* 경계검사 : 인수의 범위를 벗어난 인덱스 값을 확인하고 벗어난 값이면 std::out_of_range 예외를 발생한다.

 

* insert, emplace : insert의 경우 원소를 삽입하기위해 임시로 객체를 생성하지만 emplace의 경우 임시로 객체를 생성하지 않는다.

 

* push_front, pop_front : Double ended Queue 자료구조의 특성상 순차열의 양 끝에 선입선출방식의 구현을 위해 정의되어 있다.

'공부 > C++(STL)' 카테고리의 다른 글

forward_list 컨테이너  (0) 2018.04.03
list 컨테이너  (0) 2018.04.02
vector 컨테이너  (0) 2018.03.29
array 컨테이너  (0) 2018.03.23
람다 식(익명함수)  (0) 2018.03.01
posted by 구로보루 2018. 3. 29. 16:12

 array와 비슷한 순차컨테이너로 순차열에 원소를 추가하거나 삭제할 수 있다. 할당된 용량을 초과한다면 추가공간이 자동으로 할당된다.

 

vector<T>

T -> 원소의 타입

 

 멤버 함수

 begin

 시작 반복자를 반환

 end

 끝 반복자를 반환

 rbegin

 역방향 시작 반복자를 반환

 rend

 역방향 끝 반복자를 반환

 cbegin

 const 시작 반복자를 반환

 cend

 const 킅 반복자를 반환

 crbegin

 const 역방향 시작 반복자를 반환

 crend

 const 역방향 끝 반복자를 반환

 assign

 내용을 새 원소들로 대체한다.

 operator=

 원소들을 타입이 같은 다른 컨테이너의 원소들이나 초기화 리스트로 대체

 size

 원소들의 실제 개수 반환

 max_size

 원소들의 최대 개수 반환

 capacity

 메모리에 할당된 원소들의 개수 반환

 empty

 원소가 없으면 true 반환

 resize

 원소들의 실제 개수 변경
 shrink_to_fit

 원소들의 실제 개수에 필요한 메모리를 줄임

 front

 첫 번째 원소 참조반환

 back

 마지막 원소 참조반환

 operator[]

 원소를 인덱스로 접근

 at

 원소를 인덱스로 접근(경계검사)

 push_back  순차열의 끝에 원소를 추가
 insert

 지정된 위치에 원소 하나 또는 원소들을 추가

 emplace

 지정된 위치에 내부에서 원소를 생성해 추가

 emplace_back

 순차열 끝에 내부에서 원소를 생성해 추가

 pop_back

 순차열 끝의 원소를 제거
 erase  원소 하나 혹은 범위로 지정된 원소 제거
 clear

 모든 원소를 제거하고 size를 0으로 변환

 swap

 두 컨테이너의 모든 원소를 교환

 data

 원소들을 담고 있는 내부 배열에 대한 포인터 반환

 

* 경계검사 : 인수의 범위를 벗어난 인덱스 값을 확인하고 벗어난 값이면 std::out_of_range 예외를 발생한다.

 

* insert, emplace : insert의 경우 원소를 삽입하기위해 임시로 객체를 생성하지만 emplace의 경우 임시로 객체를 생성하지 않는다.

 

* capacity, size : 메모리를 추가 할당하지 않아도 저장할 수 있는 원소의 개수이고 size는 실제로 갖고 잇는 원소의 개수로 크기가 용량까지 다 찼을 경우 새롭게 원소를 추가하면 용량도 일정량 더 늘어나게 된다. 벡터에 추가되는 용량으로 인해 순차열의 끝에서 추가나 삭제를 하는경우가 더 효율적이다.

'공부 > C++(STL)' 카테고리의 다른 글

list 컨테이너  (0) 2018.04.02
deque 컨테이너  (0) 2018.03.30
array 컨테이너  (0) 2018.03.23
람다 식(익명함수)  (0) 2018.03.01
스마트 포인터  (0) 2018.02.23
posted by 구로보루 2018. 3. 23. 15:53

 표준 배열에 해당하는 컨테이너 타입을 정의. 표준배열에 해당하므로 원소를 추가하거나 삭제할수 없다.

 

array<T, N>

T -> 배열의 타입

N -> 배열의 크기

 

 멤버 함수

 begin

 시작 반복자를 반환

 end

 끝 반복자를 반환

 rbegin

 역방향 시작 반복자를 반환

 rend

 역방향 끝 반복자를 반환

 cbegin

 const 시작 반복자를 반환

 cend

 const 끝 반복자를 반환

 crbegin

 const 역방향 시작 반복자를 반환

 crend

 const 역방향 끝 반복자를 반환

 operator=

 같은 타입의 다른 컨테이너의 원도슫ㄹ이나 초기화 리스트로 대체

 size

 원소들의 실제 개수 반환

 max_size

 원소들의 최대 개수 반환

 empty

 원소가 없으면 true 반환

 front

 첫번재 원소 참조 반환

 back

 마지막 원소 참조 반환

 operator[]

 원소를 인덱스로 접근

 at

 원소를 인덱스로 접근(경계검사)

 swap

 두 컨테이너의 모든 원소 교환

 data

 내부 배열에 대한 포인터 반환

 

* 경계검사 : 인수의 범위를 벗어난 인덱스 값을 확인하고 벗어난 값이면 std::out_of_range 예외를 발생한다.

'공부 > C++(STL)' 카테고리의 다른 글

deque 컨테이너  (0) 2018.03.30
vector 컨테이너  (0) 2018.03.29
람다 식(익명함수)  (0) 2018.03.01
스마트 포인터  (0) 2018.02.23
반복자 연산  (0) 2018.01.26
posted by 구로보루 2018. 3. 1. 14:52

 람다 식은 호출되었거나 인수로서 함수에 전달된 위치에서 바로 익명 함수 개체를 정의하는 방법으로 일반적으로 알고리즘이나 비동기 메서드에 전달되는 코드를 캡슐화하는데 사용된다.

(https://msdn.microsoft.com/ko-kr/library/dd293608.aspx)

 

구성

[캡처 절] (매개변수 목록) mutable -> 반환타입 { 함수 정의 }

 

캡쳐 절

람다 표현식의 바깥 범위에서 캡처할 변수 목록

[=] -> 모든 자동 변수를 값으로 캡처해서 접근가능, 이용은 가능 변경이 불가

[&] -> 바깥 범위의 모든 변수를 참조로 접근가능, 본문에서 코드로 변경이 가능하기

   때문에 mutable 키워드가 필요없다.

[변수] -> 바깥에서 원하는 변수만 캡쳐

[&변수] -> 바깥에서 원하는 변수를 참조 캡쳐

[=, &변수] -> 변수만 참조 캡쳐, 나머지는 값으로 캡쳐

[&, 변수] -> 변수만 값으로 캡쳐, 나머지는 참조 캡쳐

 

매개변수 목록 : 람다가 호출될 때 람다에 표현식에서 넘겨받을 매개변수 목록

 

mutable : 값으로 캡처한 바깥 변수의 복제본을 수정 가능으로 표시하는 키워드, 생략가능

 

반환타입 : 반환되는 값이 없으면 void로 지정된다, 생략가능

'공부 > C++(STL)' 카테고리의 다른 글

vector 컨테이너  (0) 2018.03.29
array 컨테이너  (0) 2018.03.23
스마트 포인터  (0) 2018.02.23
반복자 연산  (0) 2018.01.26
accumulate 함수  (0) 2018.01.24
posted by 구로보루 2018. 2. 23. 13:54

스마트 포인터는 원시 포인터를 모방한 템플릿 타입의 객체로 주소를 담고 사용가능하다.


원시 포인터와 차이점

1. 자유 공간에 할당된 메모리 주소만 저장

2. 산술연산 불가능


스마트 포인터의 이점

1. delete를 명시적으로 호출하지 않아도 자동으로 메모리 공간을 정리해 버그를 줄여준다.

2. null로 초기화 하지 않아도 디폴트 생성자가 자동으로 생성한다.

3. 허상 포인터를 효과적으로 예방할 수 있다.

4. 자동 가비지 컬렉션이 가능하다.




unique_ptr<T>


MSDN문서를 보면 '더 강력한 unique_ptr이 auto_ptr을 대체한다'고 나와있다.(https://msdn.microsoft.com/ko-kr/library/ew3fk483.aspx)

여러 객체가 같은 주소를 소유할 수 없기 때문에 객체에 대한 단일 소유권을 가질 수 있다.


객체 생성

 std::make_unique<T>()

memory 헤더에 정의되어 있고 함수에 인자를 통해 유니크 포인터를 반환하는 함수이다.


멤버 함수

 reset()

유니크 포인터가 가리키는 객체를 소멸시키는 함수이다.

인자가 없으면 단순 소멸이고 인자가 있으면 새 객체의 주소로 대체된다.

 


 

 release()

유니크 포인터가 가리키는 객체를 nullptr로 해제하고 해당 객체를 반환한다.

 

 

 swap()

두 객체를 교환한다.

 

 

 

 get()

주소를 반환한다.

 


 

shared_ptr<T>

 

자유공간에 있는 객체 하나에 대한 소유권을 공유할 수 있다.

 

객체 생성

 std::make_shared<T>()

memory 헤더에 정의되어 있고 함수에 인자를 통해 공유 포인터를 반환하는 함수이다.

 

멤버 함수

 reset()

유니크 포인터와 동일하다.

 

 unique()

객체의 인스턴스 개수가 1이면 true를 아니면 false를 반환

 

 use_count()

인스턴스의 개수를 반환다.

 

 

 

 

'공부 > C++(STL)' 카테고리의 다른 글

array 컨테이너  (0) 2018.03.23
람다 식(익명함수)  (0) 2018.03.01
반복자 연산  (0) 2018.01.26
accumulate 함수  (0) 2018.01.24
static 멤버  (0) 2017.09.05