C++

순차 컨테이너

Jagbbum 2023. 9. 22. 17:56

STL은 표준 라이브러리로 컨테이너, 반복자, 알고리즘으로 구성되어 있다.


순차 컨테이너

1. vector

생성

vector<int> v1;
vector<int> v1(10, -1)
vector<int> v1 {1,2,3,4,5}

 

 

복제와 대입

vector<int> intVector(10,0);
intVector.assign(5, 100);
intVector.assign({1,2,3,4});

항목 룩업

기본적인 룩업 방법은 []연산자이다.

그 외에는 아래와 같다.

v.at(3)
v.frond() // 첫번째 항목
v.back() // 마지막 항목

반복자

반복자란 컨테이너의 항목들에 접근하기 위한 포인터 객체이다.

아래와 같이 사용한다.

vector.begin() // 가장 앞
vector.end() // 가장 뒤

기본 사용은 위와 같지만 댕글링 포인터 등의 버그에 취약하여 사용 시 유의해야 한다.

 

항목 삽입/삭제

- 삽입

vector.push_back(10)
vector.insert(v.begin(), 10)

위와 같이 push_back()은 가장 뒤에 넣는 것이고 insert는 임의의 위치에 항목을 삽입한다.

또한 insert는 아래와 같이 여러 항목을 동시에 삽입할 수 있다.

vector<int> v {1,1,1,1,1};
v.insert(v.begin(), 2);//{2,1,1,1,1,1}
v.insert(v.begin() + 2, 2, 3); //{2,1,3,3,1,1,1,1}
v.insert(v.end(), {4,5}); //{2,1,3,3,1,1,1,1,4,5}

emplace_back과 emplace는 항목을 생성하기 위한 인자를 직접 전달하여 내부에 항목이 생성될 수 있게 한다.

또한 생성 비용만 지불하기에 push_back과 insert보다 더 효율적이다.

v.emplace_back(1, 2); //v.push_back(point{1,2})와 같은 결과
v.emplace(v.begin(), 3, 4); //v.insert(v.begin(), point{1, 2})와 같은 결과

 

- 삭제

모든 항목을 삭제할 때는 clear()를 사용한다 하지만 capacity는 변하지 않는다.

가장 뒤의 항목을 삭제할 때는 pop_back()을 사용한다.

임의의 위치응 삭제할 때는 erase()를 사용한다.

v.pop_back(); 
v.erase(v.begin() + 1); 
v.erase(v.begin(), v.end() - 1); //begin 부터 end의 앞까지 삭제
v.clear(); //{}

 

2. list

생성

list<int> lst = {1,2,3};

 

항목 룩업

list.front()
list.back()

항목 삽입/삭제

vector와 전체적으로 같다.

 

유용한 메서드

size() : 항목의 개수 반환

empty() : 비어있는 여부 반환

resize() : size 재설정

splice() : 다른 list 삽입 - 연결될 위치에 수정하므로 상수시간 처리

unique() : 중복 삭제

merge() : list 합병

sort() : sort

reverse() : 역순 재배치

 

3. deque

양방향 큐 자료구조

벡터와 매우 유사

 

 

'C++' 카테고리의 다른 글

연관 컨테이너와 비순차 연관 컨테이너  (0) 2023.09.23
컨테이너 어댑터와 비트셋 컨테이너  (0) 2023.09.23
람다  (0) 2023.09.21
스코프  (0) 2023.09.21
포인터  (0) 2023.09.20