ㄱ.   STL의 방식은 복사되어 ( 컨데이너에 ) 들어가고, 복사 되어 나온다.
이런 복사는 해당 클래스의 복사용 멤버 함수를 사용 ( 복사 생성자, 복사 대입 연산자 ).

ㄴ.   STL의 기본 복사 방식으로 생기는 문제점.

    STL의 기본이 복사 방식으로 이루어 지기 때문에 데이터가 크면 클수록 메모리 사용량과 CPU 사용률은 더욱 높아 지는 문제점.

    상속된 객체의 경우 복사 동작이 제대로 이루어 지지 않는 형상 슬라이스.
기본 클래스의 컨테이너를 만들고 파생 클래스를 객체를 넣으면, 복사 과정에서 기본 생성자가 쓰이면서 파생 클래스 부분에 선언된 데이터는 잘려나감.

ㄷ.   해결 방안.
객체의 컨테이너를 만들지 않고, 포인터의 컨테이너를 만듬.

    속도가 빠름 포인터만 복사 하면 되기 때문

    정확 포인터를 이루는 비트를 복사 하기 때문.

    슬라이스 문제 해결 포인터를 복사 될 때 잘려나가는 데이터가 생기지 않음.


이렇게 포인터의 컨테이너를 만들면 인해 메모리 관리에 대한 문제점이 생기지만 스마트 포인터를 사용하면 해결 가능.

Posted by 냉동

ㄱ.   STL은 일반화에 기초를 두고 있어서 컨테이너도 일반화로 만들려고 하면 안 된다.
, 각각의 컨테이너에 공통적으로 있는 알고리즘은 사용 할 수 있지만, 각 컨테이너에 있는 좋은(?) 고유의 알고리즘은 사용 할 수 없다는 것.

ㄴ.    typedef을 활용하여 좀 더 쓰기 편하게 하자.

ㄷ.   컨테이너를 보관하는 클래스를 만들자.
변경이 필요 할 경우도 있는데 이럴 경우 바로 사용하지 않고 클래스를 사용해서 관리 하면 좀 더 쉽게 보관 할 수 있다.

Posted by 냉동

ㄱ.   컨테이너 구분.

    표준 시퀀스 컨테이너 ( vector, string, deque, list )

    표준 연관 컨테이너 ( set, multiset, map, multimap )

    연속 메모리 컨테이너 ( vector, string, deque )

    노드 기반 컨테이너 ( set, multiset, map, multimap, list )

ㄴ. 알맞은 컨테이너 사용은 언제?

   시퀀스 컨테이너 사용 할 시기
-
컨테이너의 아무 위치에 요소를 삽입 해야 한다면
-
컨테이너 요소들의 순서 결정에 직접 관여 해야 한다면

    탐색 속도가 중요하면?
-
해쉬 컨테이너, 정렬된 vector 그리고 표준 연관 컨테이너의 순서대로 생각.

    반복자, 포인터, 참조자가 무효화 되는 일을 최소화 해야 하나?
-
노드 기반 컨테이너를 사용 : 노드 삽입과 삭제가 일어나도 기존의 반복자나 포인터 혹은 참조자가 무효화 되지 않음.
반면, 연속 메모리 컨테이너는 전체적인 메모리 재 할당이 빈번히 일어나기 때문에 반복자나 포인터, 참조자가 무효화 되기 쉽다.

    컨테이너 내의 데이터가 C의 데이터 타입과 메모리 배열 구조적으로  호환 되야 하면 vector!

Posted by 냉동