C++의 STL 정리

ChoRong0824·2023년 5월 7일
0

C

목록 보기
16/17
post-thumbnail

Vector

배열과 거의 비슷하지만, 메모리를 잡아주지 않아도 된다는 점에서 차이가 존재합니다.
쉽게 생각해서, 배열 동적할당의 상위호환이라고 생각하면 쉽습니다.
배열 동적 할당은 포인터 사용하셔도 되고, 자세한 내용은 필자가 따로 포스팅한 c++ 객체 part를 확인해보시면 더욱 쉬울 것 같습니다.

#include <vector>

생성

vector<int> v1; // V1의 빈 벡터 생성
vector<int> v2(3); // default값 0으로 초기화된 크기 3의 벡터
// v2 = [0,0,0]
vector<int> v3(3,1); // 1로 초기화된 크기 3의 벡터
// v3 = [1,1,1]
vector<int> v4(v3); // v3를 복사해서 생성
// v4 = [1,1,1]

assign

C++에서 assign은 객체에 새로운 값을 할당하는 멤버 함수입니다. 클래스에 따라 구체적인 문법과 동작이 달라지며, 예를 들어 std::string 클래스의 assign 함수는 문자열 객체에 새로운 값을 할당합니다.

v.assign(5,2);
// v = [2,2,2,2,2]

원소 참조

v.at(index);
v[index]; // index의 원소를 참조
v.front(); // 첫 번째 원소 참조
v.back(); // 마지막 원소 참조

원소 추가

v.push_back(item); // 마지막 원소 뒤에 item 삽입
v.insert(index, item); // index 위치에 item 삽입
// 삽입한 곳의 iterator 반환
v.insert(index, count, item); // index 위치에 count 개수만큼 item 삽입

원소 제거

v.clear(); //모든 원소 제거
v.pop_back(); // 마지막 원소를 제거
v.erase(iterator); //iterator가 위치한 원소를 제거

크기 연산

v.size(); //원소의 개수를 반환
v.empty(); // size가 0이면 true 반환

여기까지가 벡터


Stack

header

#include <stack> 추가 해줌. 즉 선언해야 사용가능.

생성

stack<int> st; // 생성

추가

st.push(item); // item 삽입. 파라미터를 넘긴다고 생각해도 됨.

제거

st.pop(); // top이 가르키는 원소 제거

값 읽기

st.top(); // 가장 위에 있는 원소 반환

원소 개수

st.size(); //원소 개수 반환
st.empty(); //비어있으면 true 반환

여기까지가 스택영역 (메모리) 사용


Queue

header

#include <queue>

생성

queue<int> q;

추가

q.push(item); // item 삽입

제거

q.pop(); // 가장 앞의 원소 제거

값 읽기

q.front(); // 가장 앞에 있는 원소 반환

원소 개수

q.size(); //원소 개수 반환
q.empty(); //비어있으면 true 반환

여기까지 큐영역 (메모리) 사용하는 방법


Priority Queue

header 부분 선언

#include <queue>

생성

priority_queue<int> pq; //내림차순 less<> 기반
priority_queue<int, vector<int>, greater<int>> pq; //오름차순 기반
priority_queue<int, vector<int>, cmp> pq; //사용자 지정 정렬 기준으로 생성 가능  
//cmd는 따로 구현

추가

pq.push(item); // item 삽입

제거

pq.pop(); // top이 가르키는 원소 제거

값 읽기

pq.top(); // 가장 위에 있는 원소 반환

원소 개수

  • pq.size(); //원소 개수 반환
  • pq.empty(); //비어있으면 true 반환

Deque

header

#include <deque>

생성

deque<int> dq;

추가

dq.push_front(item);// 첫 번째 원소 앞에 item 삽입
dq.push_back(item);// 마지막 원소 뒤에 item 삽입
dq.insert(index, item);// index 위치에 item 삽입
dq.insert(index, count, item);// index 위치에 item을 count번 삽입

제거

dq.pop_front();// 첫 번째 원소 제거
dq.pop_back();// 마지막 원소 제거
dq.clear();// 모든 원소 제거
dq.erase(iterator);//iterator가 가르키는 원소 제거

값 읽기

dq.at(index);
dq[index]; // index 번째 원소 참조
dq.front(); // 첫 번째 원소 참조
dq.back(); // 마지막 원소 참조

원소 개수

dq.size(); //원소 개수 반환
dq.empty(); //비어있으면 true 반환

Set, MultiSet

header

#include <set>

생성

set<int> s;
set<pair<int,int>> s;
multiset<int> s;
multiset<vector<int>> s;

추가

s.insert(item);// item 삽입

제거

s.clear();  // 모든 원소 제거
s.erase(iter);  // iter이 가르키는 위치의 원소를 제거
s.erase(start, end);  // [start, end) 범위의 원소 모두 제거

값 읽기

s.find(item); // item을 가르키는 iter 반환, 없으면 s.end() 반환
s.upper_bound(item); // item이 끝나는 구간의 iter 반환
s.lower_bound(item); // item이 시작하는 구간의 iter 반환
s.equal_range(item); // 시작하는 구간과 끝나는 구간의 iter pair 객체 반환

원소 개수

s.empty(); // s가 비어있는지 확인
s.count(item); // item의 개수 반환
s.size(); // s의 원소 개수 반환

솔직하게, 맵이랑 벡터는 꼭 알아두었으면 하는 것이 필자의 생각입니다.

Map, MultiMap

header

#include <map>

생성

map<int, int> m;
map<string,int> m;
multiset<int> m;
multiset<vector<int>> m;

추가

m[key] = val;  //key가 가르키는 위치에 val 삽입
m.insert(item);  // item은 pair 객체

제거

m.clear(); // 모든 원소 제거
m.erase(iter); // iter이 가르키는 위치의 원소를 제거
m.erase(start, end); // [start, end) 범위의 원소 모두 제거

값 읽기

m.find(item); // item을 가르키는 iter 반환, 없으면 s.end() 반환
m.upper_bound(item); // item이 끝나는 구간의 iter 반환
m.lower_bound(item); // item이 시작하는 구간의 iter 반환
m.equal_range(item); // 시작하는 구간과 끝나는 구간의 iter pair 객체 반환

원소 개수

m.empty(); // s가 비어있는지 확인
m.count(item); // item의 개수 반환
m.size(); // s의 원소 개수 반환

필자가 해당(출처) 포스트를 읽고, 해당 포스트가 핵심만 간추려서 설명한 것이 좋아서 참고해서, 제가 모르는 부분 및 추가적인 내용이 필요한 부분은 재작성하고, 가독성이 좋게 일부 수정해서 포스팅하게 되었습니다.

profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글