STL 썸네일형 리스트형 [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++11 STL] std::shared_ptr 개요 ※ std::shared_ptr 요약 C++11에 새로 추가된 스마트 포인터인 shared_ptr에 대한 내용이다. 스마트 포인터란, 사용하지 않는 메모리나 사용이 끝난 메모리를 자동으로 해제/관리 해주는 것을 의미하는 것으로써 Java나 C#의 가비지 컬렉터와 비교 했을때 성능의 손해는 거의 없으면서 메모리 관리의 이점을 얻을 수 있으므로 편하고도 안전하다. 스마트 포인터는 메모리 누수 관리에 자신이 없는 초보자들이나 복잡하고 거대한 프로젝트를 진행할때 사용하면 적당할 거 같다. 그렇지만 필자는 스마트 포인터를 거의 사용하지 않는다. 아직은 직접 할당, 해제를 해줘야 안심?이 되기 때문이다. ※ std::shared_ptr 특징 - 레퍼런스(참조) 카운팅을 지원한다. - 명시적인 delete를 해주지 .. 더보기 [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의 거의 모든 알.. 더보기 [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개 이상의 값을 반환하기 위해 구조체를 만드는 .. 더보기 [std::vector] 원하는 값 지우기 #include #include #include #include using namespace std; struct tagRand { int nCount; CString strRand; }; int main( ) { srand( (unsigned)time(NULL) ); int nInput(1); vector vecNum; //데이터 입력 for( int i=0 ; i 더보기 STL(Standard Template Library)이란 STL이란 자료 구조와 알고리즘을 템플릿으로 제공하는 C++ 표준 라이브러리로써, Standard Template Library의 약자입니다. STL의 주요 구성 요소는 컨테이너, 할당기, 반복자, 어댑터, 알고리즘, 함수 객체로 이뤄져 있으며, 컨테이너, 알고리즘, 반복자가 가장 중요한 세 요소입니다. STL의 특징으로는 이름과 같이 일반화를 지원한다는 것과 광범위하게 이곳저곳에 두루두루 재사용 될 수 있다는 것입니다. 그 와중에도 (적재적소 사용시)효율은 떨어지지 않으며 표준이므로 이식성에도 좋고 다양한 자료구조와 알고리즘을 최적화하여 사용자가 쓰기 좋게 만들어 놓았으며 해당 알고리즘이 내부적으로 어떻게 동작하는지 몰라도 사용할 수 있는 특징들이 있습니다. STL의 단점으로는 템플릿에 기반 하기 때문.. 더보기 이전 1 다음