본문 바로가기

Algorithm/A. Intro & STL

(16)
16. Span span은 C++20에 추가된 컨테이너로 연속된 수열의 형태로 저장되는 객체(정적 배열, std::array, std::vector, std::string 등; std::deque은 할당되는 메모리가 연속되지 않을 수 있기 때문에 제외된다)를 나타낼 수 있다. 헤더파일 을 인클루드하면 span을 사용할 수 있다. span 클래스도 이 헤더파일에 정의되어 있다. span의 선언은 일반적인 시퀀스 컨테이너와 비슷한데, 복사 생성자를 이용하여 선언할 때 원본이 span이 아닐 수도 있다. #import using namespace std; int main() { int a[5] = {1, 2, 3, 4, 5}; array b({1, 2, 3, 4, 5}); vector c({1, 2, 3, 4, 5}); de..
15. Valarray valarray는 수치적 사용을 목적으로 하는 배열 형태의 수들을 관리할 수 있는 유사 컨테이너이다. 헤더파일 를 인클루드하면 valarray를 사용할 수 있다. 이 헤더파일에는 클래스 valarray가 정의되어 있다. valarray의 선언 방식은 다른 STL과 별로 다르지 않다. 1. valarray v; 2. valarray v(n); 3. valarray v(x,n); 4. valarray v(w,n); 5. valarray v({a1,a2,...,an}); 1번은 빈 컨테이너를 선언하는 코드이다. 2번과 3번같이 선언하면 길이가 $n$인 컨테이너가 생성되는데, 3번과 같이 선언하면 각각의 요소는 $x$로 초기화된다. $x$를 생략하고 2번과 같이 선언하면 각각의 요소는 기본값으로 초기화된다. 4..
14. Bitset bitset(비트셋)은 고정된 길이의 bool 타입 변수를 관리할 수 있는 컨테이너이다. 일반적인 변수가 바이트 단위로 처리되는 데 비해 비트셋은 비트 단위로 처리되기 때문에 속도가 더 빠르다. bitset 클래스는 헤더파일에 정의되어 있으며 이 헤더파일을 인클루드하면 bitset을 사용할 수 있다. bitset의 각각의 비트는 true(1) 또는 false(0)로 설정될 수 있다. bitset을 선언하는 방법은 다음과 같다. bitset b; 안에는 변수가 들어갈 수 없고 상수를 써야 한다. 또한 안에 들어가는 상수의 타입이 부호 없는 정수형인 size_t이기 때문에 실수로 안에 음수를 써도 컴파일 에러가 나지 않는다. 음수를 썼다면 size_t형에서는 매우 큰 양수로 인식되어 그만한 길이의 메모리를 ..
13. String string은 유사 컨테이너의 하나로 문자열을 다룰 때 많이 사용된다. 헤더파일을 인클루드하면 string을 사용할 수 있다. string의 원형은 basic_string이며 basic_string은 에서 인클루드하는 헤더파일 에 정의된 클래스이다. basic_string의 선언과 재정의는 에서 인클루드하는 헤더파일 에서 다음과 같이 하고 있다. _GLIBCXX_BEGIN_NAMESPACE_CXX11 template class basic_string; /// A string of @c char typedef basic_string string; string의 선언 방법은 다음과 같다: 1. string s; 2. string s(t); 3. string s(t,n); 4. string s(n,c); 5...
12. Unordered Container 연관 컨테이너는 set, multiset, map, multimap 외에도 더 존재한다. unordered_set, unordered_multiset, unordered_map, unordered_multimap은 해싱을 이용하여 자료를 저장하는 연관 컨테이너로 C++11 표준이며 그 이전에는 각각 hash_set, hash_multiset, hash_map, hash_multimap이라는 비표준 라이브러리로 존재했다. C++에서 헤더파일을 인클루드하면 unordered_set과 unordered_multiset을 사용할 수 있고 헤더파일을 인클루드하면 unordered_map과 unordered_multimap을 사용할 수 있다. 각각의 클래스는 에서 인클루드하는 헤더파일 와 에서 인클루드하는 헤더파일..
11. Map & Multimap map(맵)은 key와 value 쌍을 저장하는 연관 컨테이너이다. 헤더파일 을 인클루드하면 map을 사용할 수 있다. map 클래스는 에서 인클루드하는 헤더파일 에 정의되어 있다. set과 마찬가지로 map의 key는 중복될 수 없다. 또한 map에는 key와 value가 존재하므로 선언할 때 key의 자료형과 value의 자료형을 모두 명시해야 한다. key와 value는 pair 객체의 형태로 map에 존재한다. map의 멤버 함수는 set의 멤버 함수와 거의 같다. 기본적으로 set의 모든 멤버 함수가 map에도 내장되어 있고 기능이 같기 때문에 set에 내장된 멤버 함수에 대한 설명은 이전 글을 참고하면 된다. set에 내장되지 않은 map의 멤버 함수는 다음과 같다: m.insert_or_as..
10. Set & Multiset set(셋)은 가장 단순한 형태의 연관 컨테이너로 key라고 하는 원소들의 집합으로 이루어져 있다. 연관 컨테이너는 모두 노드 기반의 균형 이진 트리로 구현되어 있다. set의 원소는 중복될 수 없다. 헤더파일 을 인클루드하면 set을 사용할 수 있다. set 클래스는 에서 인클루드하는 헤더파일 에 정의되어 있다. set의 선언 방법도 크게 다섯 가지로 나눌 수 있다. 다른 연관 컨테이너에도 모두 같은 선언 방법이 적용된다. 1. set s; 2. set s(p); 3. set s(k); 4. set s(b,e); 5. set s(b,e,p); 1, 3, 4번과 같은 선언 방법은 이미 벡터의 선언에서도 나왔다. 각각 빈 set, $k$의 복사본, 반복자 구간 $[b,e)$의 원소들로 초기화된 set이 생..
9. Pair & Tuple pair(페어)는 독립적으로 쓰이는 일은 거의 없지만 map과 multimap의 구현에도 사용되고, 다른 컨테이너와 컨테이너 어댑터의 자료형으로도 자주 쓰이는 STL의 한 종류이다. pair 구조체(클래스가 아님)는 헤더파일 에 정의되어 있고 와 같은 헤더파일은 따로 존재하지 않는다. pair 구조체 템플릿은 두 개의 멤버변수 first와 second를 갖는데, 각각의 타입은 _T1과 _T2(각각 first_type과 second_type으로 재정의되어 있다)이다. pair의 정렬 기준은 first, second 멤버변수의 순서로 비교하는 것이다. 처음에 두 pair의 first 멤버변수를 비교하고, 만약 first 멤버변수로 대소 여부를 결정할 수 없다면 second 멤버변수를 비교한다. 여기서도 대소..