본문 바로가기

std

[C++11 STL] std::shared_ptr 개요 ※ std::shared_ptr 요약 C++11에 새로 추가된 스마트 포인터인 shared_ptr에 대한 내용이다. 스마트 포인터란, 사용하지 않는 메모리나 사용이 끝난 메모리를 자동으로 해제/관리 해주는 것을 의미하는 것으로써 Java나 C#의 가비지 컬렉터와 비교 했을때 성능의 손해는 거의 없으면서 메모리 관리의 이점을 얻을 수 있으므로 편하고도 안전하다. 스마트 포인터는 메모리 누수 관리에 자신이 없는 초보자들이나 복잡하고 거대한 프로젝트를 진행할때 사용하면 적당할 거 같다. 그렇지만 필자는 스마트 포인터를 거의 사용하지 않는다. 아직은 직접 할당, 해제를 해줘야 안심?이 되기 때문이다. ※ std::shared_ptr 특징 - 레퍼런스(참조) 카운팅을 지원한다. - 명시적인 delete를 해주지 .. 더보기
[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의 거의 모든 알.. 더보기
[C++11 STL] std::tuple 개요 ※ std::tuple 요약 TR1부터 새롭게 추가된 std::tuple은 C++98에서 기본 제공하던 std::pair의 확장 버전으로써, 컴파일 시간에 명시되거나 추론될 수 있는 데이터형 요소들을 가지는 이종 목록(heterogeneous list)이다. TR1인 Visual Studio 2010에서는 10개의 요소를 저장할 수 있고 C++11을 부분 지원하는 Visual Studio 2013부터는 저장 가능한 항목 개수에 제한이 없고 각각의 항목마다 개별 타입으로 지정 가능하다. ※ std::tuple 특징 std::tuple은 주로, 함수에서 2개 이상의 값을 반환해야할 때 사용한다. 기존에는 구조체를 이용하여 2개 이상의 값을 리턴했지만, 단순히 2개 이상의 값을 반환하기 위해 구조체를 만드는 .. 더보기