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