[C++] 컨테이너

2024. 4. 30. 00:50·C++

순차 컨테이너

자료를 순차적으로 저장

벡터(vector)

  • 동적 배열처럼 동작
  • 뒤에서 자료들이 추가됨
  • 템플릿으로 설계
  • Kvector와 유사
  • push_back(): 새로운 데이터를 벡터의 끝에 추가하고 벡터의 크기를 1만큼 증가
  • pop_back(): 벡터의 끝에서 요소를 제거하고 벡터의 크기를 하나 감소
vector<int> v1;

vector<int> v2(3); // 초기 값은 0으로, 크기 3만큼
v2.size(); // 크기
v2.max_size(); // 최대 저장 가능한 개수
v2.empty();
v2.capacity(); // 현재 저장 가능한 원소의 수

#define N 3
vector<int> v3(N, 5); // 초기 값은 3으로, 크기 5만큼 

v2[4] = 3; // 크기보다 큰 인덱스 값 수정
					// 읽는 행위가 아니라 쓰는 행위라서 저장되며 에러 발생 X

v2.clear(); // 메모리 할당을 해제하지 않고 데이터만 삭제
#define N 3
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

vector<int> v1(N, 5); // 출력: (3) 5 5 5
vector<int> v2(&a[0], &a[5]); // 출력: (5) 0 1 2 3 4
vector<int> v3(v2); // 복사 생성자, 출력: (5) 0 1 2 3 4
vector<int> v4(&v3[1], &v3[4]); // 반복자, 출력: (3) 1 2 3
vector<int> v5(v3.begin()+1, v3.begin()+4); // 반복자, 출력: (3) 1 2 3

데크(deque)

  • 벡터와 유사하지만 앞에서도 자료를 추가 및 삭제하는 연산 가능
  • 양쪽에서 입출력 가능한 벡터
  • push_front()
  • push_back()

리스트(list)

  • 벡터와 유사하지만 중간에서 자료를 추가하는 연산 가능
  • 임의의 위치에서 입출력 가능
  • bidirectional(양방향) 반복자
  • 이중 연결 리스트로 구현
  • [] operator 없음
  • random acess가 안되는 deque라고 볼 수 있음

 

연관 컨테이너

  • key 값에 의해 접근
  • 원소들 정렬되어 저장

집합(set)

  • 중복이 없는 자료들이 정렬되어 저장

맵

  • key-value 형식으로 저장
  • key를 기준으로 정렬
  • key 중복 X
  • map<>::operator[] key가 제시되면 value의 레퍼런스 반환
  • bidirectional 반복자

다중-집합

  • 집합과 유사하지만 자료의 중복 허용

다중-맵

  • 맵과 유사하지만 키가 중복 O
  • operator[] 없음

 

컨테이너 어댑터

  • 순차 컨테이너에 제약을 가해서 데이터들이 정해진 방식으로만 입출력

스택

후입 선출 자료 구조
  • stl 호출 시 템플릿 매개변수에 & 레퍼런스 붙여야 함
    • 안 붙이면 복사 생성자 호출되는데 복사 생성자 잘못 만들면 에러 발생
#include<stack>
#define N 10

stack<int> st;
for(int i=0; i<N; i++) st.push(i);

while(!st.empty()){
	cout << st.top() << " ";
	st.pop();
}
cout << endl;

// 출력: 9 8 7 6 5 4 3 2 1 0

큐

선입 선출 자료 구조
#include<queue>
#define N 10

queue<int> qu;
for(int i=0; i<N; i++) qu.push(i);

while(!qu.empty()){
	cout << qu.front() << " ";
	qu.pop();
}
cout << endl;

// 출력: 0 1 2 3 4 5 6 7 8 9

우선 순위 큐

큐의 일종으로 큐위 요소들이 우선 순위를 가지고 있고 우선 순위가 높은 요소가 먼저 출력되는 자료 구조
#include<queue>
#define N 10

priority_queue<int> pq;
for(int i=0; i<N; i++) pq.push(i);

while(!pq.empty()){
	cout << pq.top() << " ";
	pq.pop();
}
cout << endl;

// 출력: 9 8 7 6 5 4 3 2 1
728x90
반응형

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

[C++] 알고리즘  (1) 2024.04.30
[C++] 반복자  (0) 2024.04.30
[C++] STL  (1) 2024.04.30
[C++] Template  (0) 2024.04.30
[C++] Exceptions  (0) 2024.04.30
'C++' 카테고리의 다른 글
  • [C++] 알고리즘
  • [C++] 반복자
  • [C++] STL
  • [C++] Template
nueos
nueos
  • nueos
    nueos 공부 기록
    nueos
  • 전체
    오늘
    어제
    • 분류 전체보기 (191)
      • 해커톤 (1)
      • 네이버 BoostCamp (6)
      • LG 유플러스 유레카 SW (3)
        • React (21)
        • TypeScript (2)
        • JavaScript (2)
        • HTML+CSS (5)
        • Spring (7)
        • Java (6)
        • SQL (2)
        • Algorithm (8)
        • CX (6)
        • Git (2)
        • 프로젝트 (2)
        • 스터디 (9)
        • 과제 (8)
        • 특강 (1)
      • React (3)
      • Next (0)
      • Javascript (2)
      • HTML (2)
      • CSS (9)
      • Algorithm (6)
      • Database (0)
      • OS (13)
      • C++ (24)
      • Python (1)
      • jQuery (1)
      • Django (1)
      • Git (1)
      • 개발 지식 (3)
      • 정보 보안 (22)
      • 포렌식 (1)
      • 암호 (2)
      • 기타 (4)
      • 패스트캠퍼스 FE 프로젝트십 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    디지랩챌린지
    완전 탐색
    heap
    힙
    스택
    큐
    제주지역혁신플랫폼지능형서비스사업단
    Queue
    exhaustive search
    Stack
    제주해커톤
    기술로바꾸는세상
    디지털혁신
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
nueos
[C++] 컨테이너
상단으로

티스토리툴바