배열과 거의 비슷하지만, 메모리를 잡아주지 않아도 된다는 점에서 차이가 존재합니다.
쉽게 생각해서, 배열 동적할당의 상위호환이라고 생각하면 쉽습니다.
배열 동적 할당은 포인터 사용하셔도 되고, 자세한 내용은 필자가 따로 포스팅한 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]
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 반환
여기까지가 벡터
#include <stack>
추가 해줌. 즉 선언해야 사용가능.
stack<int> st;
// 생성
st.push(item);
// item 삽입. 파라미터를 넘긴다고 생각해도 됨.
st.pop();
// top이 가르키는 원소 제거
st.top();
// 가장 위에 있는 원소 반환
st.size();
//원소 개수 반환
st.empty();
//비어있으면 true 반환
여기까지가 스택영역 (메모리) 사용
#include <queue>
queue<int> q;
q.push(item);
// item 삽입
q.pop();
// 가장 앞의 원소 제거
q.front();
// 가장 앞에 있는 원소 반환
q.size();
//원소 개수 반환
q.empty();
//비어있으면 true 반환
여기까지 큐영역 (메모리) 사용하는 방법
#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 반환#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 반환
#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의 원소 개수 반환
솔직하게, 맵이랑 벡터는 꼭 알아두었으면 하는 것이 필자의 생각입니다.
#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의 원소 개수 반환
필자가 해당(출처) 포스트를 읽고, 해당 포스트가 핵심만 간추려서 설명한 것이 좋아서 참고해서, 제가 모르는 부분 및 추가적인 내용이 필요한 부분은 재작성하고, 가독성이 좋게 일부 수정해서 포스팅하게 되었습니다.