Standard Template Library, C++표준 라이브러리 중 하나로써 관련 템플릿과 클래스를 제공한다. STL은 크게 3가지 주요 컴포넌트를 제공한다.
vector_name[idx]를 사용하여 각 인덱스에 값에 접근할 수 있고 vector_name.at(idx)과 같이 클래스의 메소드 접근하는 방식으로 값에 접근 할 수 있다. vector는 값을 넣은만큼 크기가 할당되기 때문에 처음 push함수를 이용하여 값을 넣어야 한다.// 템플릿으로 제공하기에 저장하고자하는 타입을 결정해줘야 한다.
#include <vector>
int main(){
vercor<int> vecInt;
vecInt.push_back(20);
vecInt.push_back(30);
vecInt.push_back(40);
//넣어진 값은 []를 이용하여 값을 수정 할 수 있다.
vecInt[0] = 10;
//vector에 들어간 값을 모두 확인하고 싶으면 다음과 같이 반복문을 작성한다.
for (size_t i = 0; i < vecInt.size(); i++)
{
std::cout << vecInt[i] << endl;
}
return 0;
}data함수를 사용하면 vector의 주소값을 받아낼 수 있다.std::cout << *vecInt.data() << endl;
STL의 특징은 컨테이너마다 iterator를 모두 구현했다는 것이다.
이 iterator를 통해서 자료구조의 값들을 쉽게 사용할 수 있도록 하는 것이다.
vector<int>::iterator vecIter = vecIter.begin();
vector는 클래스로 구현되어 있기 때문에 클래스 접근 연산자를 이용하여 접근한다.
iterator에 시작값을 알려주면 다음 vecIter에는 첫 번째 값의 주소값이 들어있다.
따라서 다음과 같은 연산이 가능하다.
*vecInt = 100;
첫 번째 값을 100을 재할당 한다는 것이다.
다음 값도 증감연산자를 통해 가져올 수 있다.
cout << *(++veciter) << endl;
연결리스트는 앞서 살펴보았듯이 노드로 이루어진 공간에 데이터와 다음 노드의 주소값이 할당되어 있어 서로 주소값으로 연결된 구조이다.
list도 마찬가지로 템플릿을 통해서 구현되어있기 때문에 타입을 결정해주어야 한다.
// int타입의 list
list<int> listInt;
// 값을 앞으로 추가함.
listInt.push_front(30);
// 값을 뒤로 추가함.
listInt.push_back(20);
리스트는 배열 형태가 아니라 [ ] 연산자로 접근 할 수 없다.
vector와 마찬가지로 iterator로 초기화 할 때 첫 번째 데이터를 넣어준다.
list<int>::iterator iter = listInt.begin();
실제 포인터 변수는 아니지만 포인터 변수를 오퍼레이터 연산자를 통해 포인터처럼 동작하도록 되어있다.
// 포인터 변수처럼 접근이 가능하다.
int iData = *iter;
// 다음 값을 증감연산자를 통해 접근이 가능하다.
++iter;
// 다음 값을 역참조 가능하다.
iData = *iter;
리스트의 모든 값을 확인하기 위해 다음과 같이 반복문을 사용한다.
for (iter = listInt.begin(); iter != listInt.end(); ++iter)
{
cout << *iter << endl;
}
.end()함수는 마지막 데이터가 있는 공간의 다음 주소를 가르킨다. "마지막 값이 아니면"이라는 조건식을 통해서 모든 값에 접근이 가능하게 된다.