일반화된 컨테이너 중에서 가장 많이 사용된다.
필요한 크기만큼 메모리를 자동으로 재할당하여 늘릴 수 있다.
템플릿 기반으로 요소 타입에 무관하게 만들 수 있다.
C언어의
realloc()
을 통해 재할당되는 구조
// 벡터 형식(Class)으로 타입이 T형인 객체를 선언한 형태
vector<T> vec1;
// 타입이 int형인 벡터를 생성
vector<int> vec1;
#include <iostream>
#include <vector>
using namespace std;
void main()
{
// 벡터의 크기를 미리 지정할 수도 있다.
vector<int> vec1(5);
// 크기를 5로 지정하였지만, 동적 메모리이므로 필요한 만큼 메모리를 늘릴 수 있다.
}
Push_back
queue 구조의 enqueue
뒤쪽에 공간을 미리 만들고 데이터를 추가
뒤쪽에 추가하기 때문에 접근 속도 일정하고 빠름
앞쪽에 추가한다면..
군대 행군에서 산을 넘어감 앞사람 속도 맞춰야 함
교통 정체와 유사
양쪽 끝에서 데이터를 사업 및
deque<T> dq
#include <iostream>
#include <deque>
using namespace std;
int main()
{
// int num = 0;
// cin >> num;
deque<int> dq;
{
for(int i = 0; i < 5; i++)
dq.push_back((i + 1) * 10);
}
for(int i = 0; i < 5; i++)
{
cout << dq[i] << endl;
}
return 0;
}
.size()
: 크기 출력리스트는 배열 처럼 사용되지만 내부구조는 완전히 다른 형태
리스트는 이중 연결 리스트로 구현되어 있는 컨테이너이다.
연결 리스트는 노드라는 것이 붙어 있어서 데이터가 물리적으로 인접해있지 않고, 논리적인 순서를 기억하므로 데이터 삽입, 삭제의 속도가 상대적으로 빠르다.
리스트는 인덱스로 연결되어 있지 않기 때문에 iterator(반복자)를 사용해야한다.
list<int>::iterator it;
begin()
: 리스트 첫번째 위치의 포인터 값을 넘겨준다.
end()
가장 끝 요소의 다음 번째 메모리 위치
list<int>::iterator it;
for(it = lst.begin(); it != lst.end(); it++) {
cout << *it << endl;
}
JS →
for each()
와 유사한 개념