본문 바로가기

STL - Containers

[C++ STL] std::vector - emplace_back ※ 요약 std::vector의 멤버 함수인 emplace_back은 C++11부터 추가된 멤버 함수로써 push_back과 같이 vector의 요소 끝에 원소를 추가하는 함수이다. 두 함수의 가장 큰 차이점은, push_back과 같은 삽입 함수들은 삽입할 객체를 받지만 emplace_back과 같은 생성 삽입 함수는 삽입할 객체의 생성자를 위한 인자들을 받아 std::vector 내에서 직접 객체를 생성하여 삽입하므로 임시 객체의 생성과 파괴, 복사(혹은 move)를 하지 않아도 되어 성능상 더 유리하다는 것이다.필자가 전에 작성한 push_back도 꼭 읽어보길 바란다. ※ 함수 원형 template void emplace_back( Args&&... args ); e.. 더보기
[C++ STL] std::vector - push_back ※ 요약 std::vector의 멤버 함수인 push_back에 대한 내용이다. 멤버 함수 push_back은 vector의 끝에 요소를 추가할때 사용하는 함수며, 이번 포스팅에서는 C++03과 C++11에서의 사용방법에 대해 간단히 알아보도록 하겠다. 참고로 아래 내용은 vector의 특성을 알고 있다고 전제하고 진행하니 vector의 특성을 잘 모르면 이 게시물을 참고하기 바란다. 또 push_back과 같은 기능을 하지만 성능상 더 유리한 emplace_back에 대한 내용도 정리한게 있으니 꼭 읽어보기 바란다. ※ 함수 원형void push_back( const T& value );void push_back( T&& value ); //C++11 push_back의 함수 원형은 C++03때까지 하.. 더보기
[C++11 STL] std::forward_list 주요 멤버 함수 목록 ※ 요약 std::forward_list의 주요 함수 목록이다. std::forward_list의 경우는 C++11부터 추가된 컨테이너이고, 각 멤버들의 사용법은 다음 게시물부터 올리도록 하겠다. ■ - C++03 ■ - C++11 분 류 멤버 함수 설 명 Iterators begin 첫 번째 원소를 가리키는 반복자를 리턴한다. cbegin 첫 번째 원소를 가리키는 상수 반복자를 리턴한다. end 마지막 원소를 가리키는 반복자를 리턴한다. cend 마지막 원소를 가리키는 상수 반복자를 리턴한다. rbegin 제공 안 함 crbegin 제공 안 함 rend 제공 안 함 crend 제공 안 함 Element access at 제공 안 함 operator[] 제공 안 함 front 첫 번째 원소의 참조를 리턴.. 더보기
[C++ STL] std::list 주요 멤버 함수 목록 ※ 요약 std::list의 주요 멤버 함수 목록이다. C++03과 C++11의 구분을 색으로 했으며, 추후에 추가되는 C++14, C++17에 대해서도 추가하도록 하겠다. std::list의 각 멤버 함수들의 본격적인 사용법을 알아보기 전에 한 번 훑어보면 도움이 될 것이다. ■ - C++03 ■ - C++11 분 류 멤버 함수 설 명 Iterators begin 첫 번째 원소를 가리키는 반복자를 리턴한다. cbegin 첫 번째 원소를 가리키는 상수 반복자를 리턴한다. end 마지막 원소를 가리키는 반복자를 리턴한다. cend 마지막 원소를 가리키는 상수 반복자를 리턴한다. rbegin 역 순차열의 첫 번째 원소를 가리키는 반복자를 리턴한다. crbegin 역 순차열의 첫 번째 원소를 가리키는 상수 반.. 더보기
[C++ STL] std::vector 주요 멤버 함수 목록 ※ 요약 std::vector의 주요 멤버 함수 목록이다. 오버로딩 되는 항목들에 대해서 모두 넣지 않았지만 대략적인 설명을 할 것이므로 큰 문제는 없을 것이다. 또 한 C++03과 C++11의 구분을 색으로 할 것이며, 추후에 추가되는 C++14, C++17에 대해서도 추가하도록 하겠다. std::vector의 본격적인 사용법을 알아보기 전에 한 번 훑어보면 도움이 될 것이다. ■ - C++03 ■ - C++11 분 류 멤버 함수 설 명 Iterators begin 첫 번째 원소를 가리키는 반복자를 리턴한다. cbegin 첫 번째 원소를 가리키는 상수 반복자를 리턴한다. end 마지막 원소를 가리키는 반복자를 리턴한다. cend 마지막 원소를 가리키는 상수 반복자를 리턴한다. rbegin 역 순차열의 .. 더보기
[C++11 STL] std::array 개요 ※ std::array 요약 std::array는 C++11에 새롭게 추가된 컨테이너 라이브러리로써, 크기가 고정되어 있다는 것을 제외하면 std::vector와 비슷하다. 크기가 고정이므로 스택에 저장되며 C++03까지는 없었던 고정 길이 배열 자료구조 컨테이너로써 기존의 배열을 대체하기에 완벽하다. ※ std::array 특징 - 배열을 대체할 수 있다. - 정적 배열이므로 스택에 저장된다. (std::vector는 힙 메모리에 저장된다!) - 데이터가 연속된 위치에 저장되므로 랜덤 액세스가 가능하고 접근 속도도 빠르다. - 정적이므로 push_back(), pop_back(), insert(), erase(), clear(), resize(), reserve(), capacity()멤버 함수는 지원.. 더보기
[C++ STL] std::deque 개요 ※ std::deque 요약 std::deque는 Double Ended Queue의 약자로써, 시퀀스 컨테이너다. 필자는 시뮬레이터 서버를 제작할 때와 Singleton 방식의 Log Class를 제작할때 std::deque의 사용을 고려해본 적이 있다. ※ std::deque 특징 - 크기가 가변적이다. (사실 std::array를 제외한 거의 모든 STL 컨테이너의 특징이다.) - 앞(front)과 뒤(back)에서의 삽입, 삭제 성능은 좋지만 중간에서의 삽입, 삭제는 그다지 좋지 않다. - std::deque는 Stack과 Queue가 결합된 자료구조로써 연결 리스트보다 구현하기가 어렵다. - std::vector처럼 랜덤 액세스가 가능하다. ※ std::deque와 std::vector - st.. 더보기
[C++11 STL] std::forward_list 개요 ※ STD::forward_list 요약 std::list가 양방향(double linked list)이라면 std::forward_list는 단방향(single linked list)이다. 단방향 연결 리스트라 양방향인 std::list보다 메모리 사용량이나 처리 속도면에서 조금 유리하다. double linked list가 필요하다면 std::list를, single linked list로도 충분하다면 std::forward_list를 사용한다. ※ std::forward_list 특징 - single linked list(단일 연결 리스트) 자료구조를 이용하여 만든 시퀀스 컨테이너다. - 설계 디자인을 std::list에 맞춘다.(STL은 범용성을 지향하므로 다른 컨테이너들도 마찬가지다.) - 속도.. 더보기
[C++ STL] std::set 개요 ※ std::set 요약 std::set은 std::map과 상당히 비슷한 연관 컨테이너이다. 다른 점이 있다면 value 없이 key만으로 이뤄졌다는 것 정도이다. std::set은 노드 기반 컨테이너이며 균형 이진 트리로 구현 되므로 균형 이진 트리의 모든 특징을 갖는다. std::set은 std::map과 마찬가지로 중복된 key를 저장할 수 없으므로, 중복 저장하고 싶다면 std::multiset을 사용해야 한다. 동일 타입 집합이라는 점에서는 std::vector와 같지만 요소가 정렬된 위치에 삽입 된다는 점이 다르다. ※ std::set 특징 - std::set은 std::map과 상당히 비슷하다. 차이점이라면 std::map과 다르게 value 없이 key만 저장한다는 것 정도다. - std.. 더보기
[C++ STL] std::map 개요 ※ std::map 요약 필자가 std::vector와 함께 많이 사용하는 연관 컨테이너 std::map에 대한 설명이다. std::map은 key와 value의 쌍을 원소로 저장(pair 객체로 저장)하며, set처럼 원소의 key는 중복될 수 없다. 중복 key를 저장해야 한다면 std::multimap을 사용하여야 한다. 연관 컨테이너는 어떠한 key와 짝을 이루어 자료를 보관하는데, 자료를 넣거나 빼거나 찾을 때는 key를 이용하여야 한다. ※ std::map 특징 - std::map은 레드-블랙 트리(Red-Black Tree) 자료구조이다. - std::map의 key는 중복될 수 없다. 중복 저장해야 한다면 std::multimap을 사용한다. - 데이터 삽입과 동시에 정렬이 일어난다. - .. 더보기
[C++ STL] std::list 개요 ※ std::list 요약 std::list는 double linked list(이중 연결 리스트)라는 자료구조를 이용하여 만든 시퀀스 컨테이너다. 템플릿 기반이므로 임의 타입을 요소로 가질 수 있으며, 요소 개수에 따라 동적으로 메모리를 관리한다. double linked list로 되어 있기에 double linked list의 특징을 거의 그대로 가지고 있으며 linked list 자료구조에 대한 이해가 있어야 알맞는 상황에 알맞게 사용할 수 있다. 필자는 std::list를 거의 사용하지 않는다. 나뻐서 안 사용한다기 보다는 std::vector로도 충분한 상황이 대부분이기 때문이다. ※ std::list 특징 - 고정 길이인 배열에 비해 길이가 가변적이다. - std::vector와 달리 데이터.. 더보기
[C++ STL] std::vector 개요 ※ std::vector 요약 필자가 std::map과 함께 가장 많이 사용하는 시퀀스 컨테이너 std::vector에 대한 설명이다. std::vector는 동일 타입의 자료 집합으로써 흔히 배열에 비유를 많이 한다. 또한 템플릿 기반이므로 임의 타입을 요소로 가질 수 있으며, 요소 개수에 따라 동적으로 메모리를 관리한다. 다른 컨테이너들에 비해 구조가 단순하고 사용 방법이 쉬우며 속도도 빠른편이다, 또 실용적이라 활용 빈도가 높다. ※ std::vector의 특징 - 배열을 대체할 수 있다. - 동일 타입의 자료 집합이며 각 요소는 연속된 위치에 배치된다. - 연속된 위치에 배치되므로 임의 위치를 빠른 속도로 액세스 할 수 있다. - 최상위 레벨의 임의 접근 반복자를 제공하므로 STL의 거의 모든 알.. 더보기
STL(Standard Template Library)이란 STL이란 자료 구조와 알고리즘을 템플릿으로 제공하는 C++ 표준 라이브러리로써, Standard Template Library의 약자입니다. STL의 주요 구성 요소는 컨테이너, 할당기, 반복자, 어댑터, 알고리즘, 함수 객체로 이뤄져 있으며, 컨테이너, 알고리즘, 반복자가 가장 중요한 세 요소입니다. STL의 특징으로는 이름과 같이 일반화를 지원한다는 것과 광범위하게 이곳저곳에 두루두루 재사용 될 수 있다는 것입니다. 그 와중에도 (적재적소 사용시)효율은 떨어지지 않으며 표준이므로 이식성에도 좋고 다양한 자료구조와 알고리즘을 최적화하여 사용자가 쓰기 좋게 만들어 놓았으며 해당 알고리즘이 내부적으로 어떻게 동작하는지 몰라도 사용할 수 있는 특징들이 있습니다. STL의 단점으로는 템플릿에 기반 하기 때문.. 더보기