상세 컨텐츠

본문 제목

STL과 Vector&iterator

알고리즘

by 홍루피 2018. 9. 2. 22:42

본문

**생능출판사의 C++ Programming을 공부한 내용입니다.


STL이란?

C++에서 제공하는 표준 템플릿 라이브러리

템플릿으로 작성된 많은 제네릭 클레스와 함수 라이브러리



STL의 구성요소

1. container: 템플릿 클래스, 데이터를 담아두는 자료구조를 구현한 클래스

ex) 리스트, 큐, 스택, 맵, 셋, 백터 등


2. iterator: 컨테이너 원소에 대한 포인터, 반복자라고 불림, 여러 타입의 iterator가 있음


3. 알고리즘: 컨테이너의 원소에 대한 복사, 검색, 삭제, 정렬 등의 기능을 구현한 템플릿 함수



Vector란?

가변 길이 배열을 구현한 제네릭 클래스

스스로 내부 크기를 조절

시작 인덱스 0



Vector 사용법


  • vector객체 생성

vector<int> v;


  • vector에 원소 삽입: push_back()멤버 함수를 이용, 벡터의 맨 마지막에 값을 삽입

v.push_back(1);

v.push_back(2);

v.push_back(3);


-> 벡터에 1 2 3 이 순서대로 저장



  • vector 원소 값 읽고 변경하기

v.at(2) = 5; //v의 3번째 값을 5로 변경한다.

int n = v.at(1); //n은 v의 2번째 값을 가짐



  • vector를 배열처럼 사용하기

v[2] = 5; 

int n = v[2]; 


위와 동일하지만 다른 방식으로 쓸 수 있다.



  • vector의 원소 개수 알아내기

v.size()



  • vector의 원소 삭제: erase() & iterater를 함께 사용

vector<int>::iterator it; //int형 벡터를 가리키는 포인터 it

it =. v.begin(); //it는 v의 첫번째 원소를 가리킨다.

it = v.erase(it); //v에서 가리키고 있던 첫번째 원소를 삭제 한다.


erase(it)는 it는 it가 가리키는 원소를 삭제 한 후, 벡터의 원소들을 다시 앞으로 한 자리씩 이동시키고 

삭제된 다음 원소를 가리키는 포인터를 리턴함으로 it가 리턴값으로 바뀌어야 한다.


-> 1 2 3 중 1을 삭제하면 2 3이 되고 it는 1을 가리키다가 2를 가리킴




iterator 사용법


vector<int>::iterator it;

vector<int> v;


it = v.begin() //v의 첫번째 원소에 대한 주소를 it에 저장

it++; //벡터의 다음 원소를 가리킴

int n = *it; //it가 가리키는 원소의 값을 n에 읽어온다.

*it = 5; //it가 가리키는 원소에 5를 쓴다.

it = v.end(); //마지막 다음 위치에 대한 포인터를 저장


v. end() 는 마지막 원소 다음 위치의 주소



  • 벡터의 모든 원소에 접근하기

for ( it = v.begin(); it != v.end(); It++ ) {

   int n = *it;

   cout<<n<<endl;

}




'알고리즘' 카테고리의 다른 글

18. 층간소음  (0) 2020.04.17
13. 가장 많이 사용된 자릿수  (0) 2020.04.03
[2440/2441] 별찍기 3-4  (0) 2018.05.11
[2438/2439] 별찍기 1-2  (0) 2018.05.11
[1152] 단어의 개수  (0) 2018.05.09

관련글 더보기