728x90

같은 타입의 여러 객체를 저장하는 일종의 집합

컨테이너는 클래스 템플릿으로,

(컨테이너는..데이터를 저장하고 관리하기 위한 클래스)

컨테이너 변수를 선언할 때 컨테이너에 포함할 요소의 타입을 명시할 수 있다.

컨테이너에는 복사 생성과 대입을 할 수 있는 타입의 객체만을 저장할 수 있고

요소의 추가 및 제거를 포함한 다양한 작업을 도와주는 여러 멤버 함수를 포함하고 있다.

 

 

컨테이너의 종류

STL에서 컨테이너는

자료를 저장하는 방식

관리하는 방식에 따라 여러 가지 형태로 나뉠 수 있음

 

STL 컨테이너는 크게 다음과 같이 세 가지 유형으로 구분됨

 

1. 순차(시퀀스) 컨테이너(sequence container)

데이터를 선형으로 저장하며, 특별한 제약이나 규칙이 없는 가장 일반적인 컨테이너

 임의의 위치에 삽입, 삭제가 가능합니다.

 데이터를 순차적으로 저장합니다.

 일반적인 자료구조와 동일한 형태

 자료를 입력한 순서대로 저장하기 떄문에 저장, 검색, 알고리즘에 불리

 => 많지 않은 자료, 검색 속도 중요하지 않을 때 사용

 

 

vector(가변배열), deque(덱,앞뒤로 넣고 빼는큐), list(양방향 연결리스트), forwad_list(단방향 연결리스트)

 

2. 연관 컨테이너(associative container)

데이터를 일정 규칙에 따라 조직화하여 저장하고 관리하는 컨테이너

검색에 유리

 

set, multiset, map, multimap

 

3. 어댑터 컨테이너 (adapter container)

결함과 명료성을 위해 인터페이스를 제한한 시퀀스나 연관 컨테이너의 변형

단, 반복자를 지원하지 않으므로 STL 알고리즘에서는 사용할 수 없습니다.

 

 

stack, queue, priority_queue

 

출처

http://tcpschool.com/cpp/cpp_container_intro

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com


출처: https://heekim0719.tistory.com/314 [별토끼 DEVLOG]

 

[C++] STL Container 개념 및 특징

[C++] STL Container 개념 및 특징 STL(Standard Template Library) 란? C++의 템플릿을 이용해 표준으로 정리된 라이브러리 STL의 구성 요소 1. 반복자 :STL 컨테이너에 저장된 원소들을 가리키는 포인터 2. 컨테..

heekim0719.tistory.com

 

728x90
728x90

템플릿(template)은 C++ 프로그래밍 언어의 한 기능으로, 함수와 클래스가 제네릭 형과 동작할 수 있게 도와 준다. 함수나 클래스를 개별적으로 다시 작성하지 않고도 각기 다른 수많은 자료형에서 동작할 수 있게 한다. 여러 자료 형으로 사용할 수 있도록 하게 만들어 놓은 틀.

출처: https://blockdmask.tistory.com/43 [개발자 지망생]

 

템플릿은 함수, 클래스 붕어빵 만드는 붕어빵 틀

재료는 객체타입

 

템플릿의 종류는 함수 템플릿과 클래스 템플릿의 두 가지가 있다.

 

함수 템플릿

여러 다른 자료형(int, long, float, double, class... )을 템플릿 인자 ('<...>' 안에 들어가는)로 받아, 함수 내부에서 활용할 수 있도록 한 것이다. 다시 말하면, 여러 다른 자료형에 대하여 같은 역할을 하는 하나의 함수 계열을 하나의 템플릿으로 표현할 수 있다는 점이다. 

클래스 템플릿

클래스 템플릿은 클래스를 템플릿 변수에따라 생성할 수 있게 하는 기능이다. 클래스 템플릿은 컨테이너의 용도로 많이 쓰인다. 

 

 

 

템플릿 특수화

특정 타입, 다른 기능수행 즉 특수화하게 하려고 따로 템플릿 정의해 만드는거

 

템플릿 만들 때는 템플릿 선언 

template <typename T>

T라는 타입에 템플릿 선언한다는 뜻 , 

myFunc(1,3)

여기 맞게 값넣으면 알아서 함수구체화됨

"이렇게 템플릿의 구체화는 컴파일 타임에 필요한 타입에 대해서만 구체화를 하게된다. 위코드에서 구체화된 두 개의 함수 이름은 같고 시그니처만 다르므로 서로 오버로딩 관계다. 색이 다른 붕어빵~"

 

 

 

둘의 차이점

클래스 템플릿 사용할 때 반드시 타입 명시해줘야 함.

auto obj = MyClass<int>(3):

 

3써서 타입추론이 자동이뤄지는거 아닐까? 왜 타입을 강제지정할까?

 

[클래스 템플릿 구체화에 대한 이해]

(객체생성) 인스턴스화가 되기 전(=생성자가 호출되기 전)에 먼저 객체를 위한 메모리가 할당되어야 하는데

메모리 할당을 위해서는 

생성자에 전달되는 인수의 타입을 미리 알아야함! (여기서 객체에서 사용되는 타입은 클래스 멤버 변수의 타입을 말함.)

즉 클래스의 생성자가 호출되기 전에 객체를 위한 메모리가 할당되어 있어야 한다는 거~

 

 

 

 

 

 

 

 

출처: 

<대박적 설명>

https://thrillfighter.tistory.com/408

 

C++ 템플릿(template) 이해하기

템플릿을 사용하여 프로그래밍 하는 것을 일반화(Generic) 프로그래밍이라고도 한다. 개인적으로 C++을 제대로 공부하기 위한 첫 번째 관문은 템플릿(template) 아닐까 생각한다. 템플릿을 알아야 S

thrillfighter.tistory.com

https://ko.wikipedia.org/wiki/%ED%85%9C%ED%94%8C%EB%A6%BF_(C%2B%2B)

728x90

+ Recent posts