C++

vector, deque, set

bumpang0629 2022. 4. 11. 15:05

struct TA 

{

    int a;

    double b;

}

TA a; //구조체 변수

class CA

{

pribate:

    int a;

    double b;

public:

    맴버함수

}

TA a; // 객체

//접근지정자가 있기 때문에 

 

template <class T> class vector

{

}

 

vector a; 

어떤 배열을 동적으로 메모리를 할당해주는 기능을 갖는다.

class deque

{

}

deque a;

 

 

STL 란?

STL의 사전적 의미는 표준템플릿 라이브러리이다.

템플릿의 철학은 누구나 공통적으로 사용하기 위한 일반화 프로그래밍을 기반으로 한다.

무분별한 여러 형태의 코드를 지양하고 표준화된 코드를 지향한다.

 

STL 의 성능

템플릿 기반잉라고 해서 느릴 것이라는 편견이 있지만 반복적으로 성능면에서는 어떤 라이브러리에 비해서 전혀 떨어지지 않는다.

 

이해를 한다면 벡터 데크 리스트를 자연스럽게 알게 된다.

 

 

반복자:

컨테이너의 요소를 가리키는 객체로 컨테이너의 시작부터 끝까지 이동하면서 요소를 읽거나 쓰기 위해 사용한다.

컴파일어의 내부 알고리즘은 컴파일러 제작 회사마다 조금씩 다르다

 

 

벡터:

일반화된 컨테이너 중에서 가장 많이 사용한다.

필요한 크기만큼 메모리를 자동으로 재할당하여 늘릴 수 있다.

켐플릿 기반으로 요소의 타입에 무관하게 만들 수 있다.

 

벡터의 사용형태

벡터의 형식으로 타입이 T형인 객체를 선언한 형태이다.

vector <T> vec1;

 

타입이 int형인 벡터를 생성하려면

vector<int> vec1;

 

벡터의 크기를 머리 저장할 수도 있다.

vector<int> vec1(5);

 

벡터는 배열의 구조를 가지고 있다.

 

빈 벡터를 생성한 후 루프를 통해 push_back() 함수로 백터의 뒤쪽에 5개의 요소를 추가하였다.

벡터는 요소들을 인접한 메모리 위치에 연속적으로 저장하므로 요소에 빠르게 접근.

중간에 요소를 삽입, 삭제 시에는 발생 기준 메모리에서 전체를 밀고 당겨야 하므로 상대적으로 속도가 느리다.

why!

ㄴ 느린 이유는 푸쉬백함수는 뒤에 이어 붙이는 로직인데 중간에 데이터를 넣거나 삭제하면 뒤에 나머지 요소를 이동해야되기 때문에 비효율적이다.

 

vector 예제

벡터는 크기를 정해줄 수 있지만 범위를 넘더라도 동적배열처럼 정상적으로 작동한다.

 

 

 

데크란

 

데크는 양쪽 끝에서 데이터를 삽입 및 삭제할 수 있는 컨테이너이다. 벡터와의 차이점은 데이터를 끝에서만 삽입, 삭제하느냐 양쪽 끝에서 하느냐 차이다.

 

 

deque 예제

56이 메모리에 추가되고

2와 1이 차례로 앞에 추가된다.


리스트

리스트는 이중연결 리스트로 구현되어 있는 컨테이너이다.

연결리스트는 노드라는 것이 들어 있어서 데이터가 물리적으로 인접해있지 않고, 논리적인 순서를 기억하므로 데이터 삽입, 삭제의 속도가 상대적으로 빠르다.

 

리스트의 사용형태 

리스트의 형식으로 타입이 T형인 리스트 객체를 선언한 형태이다.

 

리스트는 데이터가 서로 접근하지 않고 뿔뿔히 흩어져 있고, 노드로 연결되어 있다.

리스트의 데이터를 출력하기  위해서는 노드를 가리키는 특별한 포인터인 반복자 객체인 iterator를 사용해야한다.

 

begin() = 첫번째 노드

end() = 마지막노드  +1 

이터레이터를 쓰면

타입을 고려하지 않아도 되는 장점이 있다.

 

 

셋이란

 

셋이란 사전적 의미로 '집합'이라는 뜻인데, 동일한 타입의 데이터를 모아놓은 것이다.

데이터는 

키의 중복을 허용하지 않는다. 동일한 키가 있으면 자동으로 제거된다.

'C++' 카테고리의 다른 글

C++ - 반복자  (0) 2022.04.12
C++ - 맵  (0) 2022.04.12
가상함수  (0) 2022.04.07
C++  (0) 2022.03.31