[C++] STL 벡터(Vector)
카테고리: Cpp
태그: STL
이 글은 C++ STL 벡터(Vector)를 공부하고 정리한 글입니다
벡터
- 어떤 자료형도 넣을 수 있는 동적 배열
- 기본 데이터
- 클래스
- 포인터
- 그 안에 저장된 모든 요소들이 연속된 메모리 공간에 위치
- 요소 수가 증가함에 따라 자동으로 메모리를 관리해 줌
-
어떤 요소에도 임의로 접근 가능
변수 생성
std::vector<int> scores; // 빈 벡터 만들기 scores.push_back(1); scores.push_back(2); std::vector<int> scores1(scores); // 벡터 사본 만들기 std::vector<int> prices(10); // 10개의 int 데이터를 가지고 있는 벡터를 만든다(모든 요소의 값은 0)
push_back()
- vector의 맨 뒤에 요소를 추가한다
scores.push_back(30); names.push_back("Coco");
pop_back()
- vector의 맨 뒤에 있는 요소를 제거한다
scores.pop_back();
capacity()
- vector에 할당된 요소 공간 수
scores.capacity();
size()
- vector에 실제로 들어 있는 요소 수
scores.size();
reserve()
- vector의 용량을 늘린다
- 용량이 증가해야 하면 새로운 저장 공간을 재할당하고 기존 요소들을 모두 새 공간을 복사
- 불필요한 재할당을 막기 위해 vector를 생성한 직후에 이 함수를 호출하자
scores.reserve(10);
operator[]
- 지정된 위치의 요소를 참조로 반환한다
scores[i] = 3; std::cout << names[i] << " "; std::cout << myCats[i].GetScore() << " ";
resize()
- vector의 크기를 바꿔준다
- 만약 바꿀 크기가 기존 용량보다 크다면 재할당하며 해당 크기까지 요소를 추가해준다(기본값은 0)
- 만약 바꿀 크기가 기존 용량보다 적다면 크기만 남기고 나머지는 버린다
scores.push_back(10); // 10 scores.push_back(20); // 10, 20 scores.resize(4); // 10, 20, 0, 0 scores.resize(6, 2); // 10, 20, 0, 0, 2, 2 scores.resize(3); // 10, 20, 0
begin()
- vector의 첫 번째 요소를 가리키는 반복자를 반환
vector<int>::iterator bIter = scores.begin();
end()
- vector의 마지막 요소 바로 뒤의 요소를 가리키는 반복자를 반환
vector<int>::iterator eIter = scores.end();
rbegin()
- vector의 마지막 요소를 가리키는 역방향 반복자를 반환
vector<int>::reverse_iterator reversedBeginIt = scores.rbegin();
rend()
- vector의 첫 번째 요소 바로 앞의 요소를 가리키는 역방향 반복자를 반환
vector<int>::reverse_iterator reversedEndIt = scores.rend();
insert()
- vector의 특정 위치에 요소를 삽입한다
// scores : 10 20 30 40 50 vector<int>::iterator it = scores.begin(); ++it; it = scores.insert(it, 35); // 10 35 20 30 40 50
assign()
- vector의 모든 요소를 버리고 새로운 요소로 채운다
// scores : 10 20 scores.assign(5, 30); // 30 30 30 30 30
swap()
- 같은 자료형의 두 벡터를 맞바꾼다
vector<int> scores; // 10 20 30 100 vector<int> anotherScores; // 40 50 60 scores.swap(anotherScores); // socres : 40 50 60 // anotherScores : 10 20 30 100
clear()
- vector를 싹 지운다
- 크기(size)는 0이 되고 용량(capacity)은 변하지 않음
scores.clear();
벡터의 장점
- 순서와 상관 없이 요소에 임의적으로 접근 가능
- 제일 마지막 위치에 요소를 빠르게 삽입 및 삭제
벡터의 단점
- 중간에 요소 삽입 및 삭제는 느림
- 재할당 및 요소 복사에 드는 비용
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기