IT/C,C++

[C++] STL 컨테이너 정리

nohumb 2023. 11. 8. 11:11
SMALL

Array

고정 길이 배열 표현

기본적인 배열

Vector

1. 데이터 수가 가변적일 때

2. 배열 같은 특성으로 데이터 접근 시 메모리 효율적

3. 데이터 삽입/삭제 빈번하면 메모리 비효율적

#include <iostream>
#include <vector>

int main(void){
	std::vector<int> v1 = {5, 3, 1, 2, 4};
	std::vector<int>::iterator iter = v1.begin();

	for (size_t i=0; i<v1.size(); i++){
		std::cout << "v1["<< i <<"] address : " << &v1[i] << " | ";
		std::cout << "iterator address : " << &(*(iter+i)) << '\\n';
		//Checking address of by direct access, by iterator
	}
}
  • Methods
    • size() : 원소 개수
    • at(index) : index 번째 원소 접근
    • front() : 첫 번째 원소 반환
    • back() : 마지막 원소 반환
    • begin() : 첫 번째 원소 가리킴
    • end() : 마지막 원소 가리킴
    • empty() : 비었으면 1, 아니면 0 반환
    • push_back(value) : n을 마지막에 push
    • pop_back() : 마지막 요소 pop
    • insert(iter, n, n1, …) : iter 부분에 n, n1, … 삽입
    • erase(iter), erase(iter_start, iter_end) : iterator 범위만큼 삭제
    std::vector<int> v1 = {1,2,3,4,5};
    v1.erase(v1.begin()+1, v1.begin()+3);
    //v1 = {1,4,5}
    • iter_swap(iter p, iter q) : 스왑
    std::vector<int> v1 = {1,2,3,4,5};
    iter_swap(v1.begin()+1, v1.begin()+3);
    //v1 = {1,4,3,2,5}

Link (Double Linked List)

데이터 수가 가변적일 때 사용

중간 데이터 삽입 삭제 빈번할 때

순차적인 데이터 접근 방식, 검색이 빈번하면 메모리 비효율적

  • methods
    • vector와 공통되는 메서드 많으니까 직접 테스트해보기
    • push_front(value)
    • pop_front()
    • reverse() : 모든 요소의 순서 뒤집기
    • sort(Compare compare) : 기본적으로 오름차순 정렬
    #include <iostream>
    #include <list>
    
    bool comp(int a, int b){ return a > b; }
    
    int main(void){
    	std::list<int> lt1 = {5,2,3,4,1};
    	lt1.sort(comp);
    
    	for(std::list<int>::iterator iter = lt1.begin(); iter != lt1.end(); iter++){
    		std::cout << *lt << ' ';
    	}
    	std::cout << '\\n'; //lt1 = {5,4,3,2,1};
    }

Stack

그냥 스택(LIFO)

  • Methods
    • push(value), pop()
    • top() : 최상위 데이터 반환
    • size(), empty()
SMALL

Queue

그냥 큐(FIFO)

  • Methods
    • push(value) : 맨 뒤에 value 추가
    • pop() : 맨 앞 데이터 pop
    • front(), back(), size(), empty()

Pair

순서쌍

  • Members
    • first : 첫번째 인자
    • second : 두번째 인자
  • Methods
    • make_pair(값1, 값2) : 순서쌍 만들기
    • {a, b} 형식으로도 표현 가능
    #include <iostream>
    #include <utility>
    
    int main(void){
    	std::pair<int, int> p;
    	p = {10, 20}
    }

Priority Queue

힙으로 구현된 자료구조

  • Methods
    • push(value), pop(), top()
    • size(), empty()
    #include <iostream>
    #include <queue>
    
    int main(void){
    	std::priority_queue<int> pq;
    	pq.push(3);
    	pq.push(6);
    	pq.push(1);
    	pq.push(5);
    
    	while(!pq.empty()){
    		std::cout << pq.top() << ' ';
    		pq.pop();
    	}
    	std::cout << '\\n';
    	//6 5 3 1
    }

 

LIST