코드 개발 초기에는 어려운 코드가 미덕인 시절이 있었다.
강사님께서 잊혀지지 않는 코드로 모나리자를 그림을 그렸던 mi친 작품..
세기말이 끝나고 프로젝트가 커지고 표준화에 대한 요구가 커졌다.
container는 용기를 의미한다.
배열처럼 동일한 요소들로 구성되어야한다.
2kind : Sequence Container, Sorted Associactive container
동일한 객체가 선형으로 구성된 집합
대표적으로 3가지의 종류가 있다.
vec·tor ˈvektər
- a course to be taken by an aircraft.
- an organism, typically a biting insect or tick, that transmits a pathogen, disease, or parasite from one animal or plant to another.
- a quantity having direction as well as magnitude, especially as determining the position of one point in space relative to another.
구성 요소에 임의 접근이 가능하다. 요소 끝에 삽입/삭제는 빠르지만 처음이나 중간 삽입/삭제는 요소 개수에 따라 처리속도가 비례한다.
집합에 키와 데이터를 같이 관리하는데, 키의 중복은 허용하지 않으므로, 동일한 키가 2개 존재할 수 없으며, 키를 사용하는 원하는 객체를 빠르게 찾아간다.
iterate: perform or utter repeatedly.
컨테이너의 요소를 가리키는 객체로 컨테이너의 시작부터 끝까지 이동하면서 요소를 읽거나 쓰기 위해 사용
STL은 이미 완성된 알고리즘 제공되어 사용하면 된다.
알고리즘은 모두 일반적이므로 여러 컨테이너에서 사용할 수 있다.
장점
단점
일반화된 컨테이너 중에서 가장 많이 사용된다.
필요한 크기만큼 메모리를 자동으로 재할당하여 늘릴 수 있다.
템플릿 기반으로 요소 타입에 무관하게 만들 수 있다.
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()
와 유사한 개념