반응형
<vector>은 C++ 표준 라이브러리에서 제공하는 동적 배열 컨테이너로, std::vector 클래스를 정의합니다. 동적 배열은 크기가 가변적이어서 런타임에 요소를 추가하거나 제거할 수 있습니다.
std::vector는 내부적으로 메모리를 효율적으로 관리하며, 배열과 유사한 방식으로 요소에 접근할 수 있는 기능을 제공합니다. 또한 자동으로 메모리를 재할당하면서 크기를 조정합니다.
주요 특징
- 동적 크기 조정
요소를 추가하거나 제거할 때, 자동으로 크기를 조정합니다.
(초기 용량이 초과되면 메모리를 재할당하여 더 큰 공간을 확보합니다.) - 배열과 유사한 인덱싱
요소에 배열처럼 인덱스를 통해 접근할 수 있습니다. (O(1) 시간 복잡도) - STL과의 통합
std::vector는 이터레이터를 지원하며, 다른 STL 알고리즘과 잘 통합됩니다. - 안전한 메모리 관리
메모리 할당 및 해제 작업이 자동으로 이루어져, 명시적인 동적 메모리 관리가 필요하지 않습니다.
주요 멤버 함수
- 생성자 및 소멸자
- std::vector<T> v; : 빈 벡터 생성.
- std::vector<T> v(n); : 크기가 n인 벡터 생성. 기본값으로 초기화.
- std::vector<T> v(n, value); : 크기가 n이고, 모든 요소를 value로 초기화.
- 크기 및 용량
- v.size() : 현재 요소 개수 반환.
- v.capacity() : 할당된 메모리의 총 용량 반환.
- v.resize(n) : 벡터 크기를 n으로 조정.
- v.reserve(n) : 용량을 최소 n으로 설정.
- 요소 접근
- v[i] 또는 v.at(i) : i번째 요소에 접근.
- v.front() : 첫 번째 요소.
- v.back() : 마지막 요소.
- 요소 추가 및 제거
- v.push_back(value) : 맨 뒤에 value 추가.
- v.pop_back() : 마지막 요소 제거.
- v.insert(pos, value) : pos 위치에 value 삽입.
- v.erase(pos) : pos 위치의 요소 제거.
- v.clear() : 모든 요소 제거.
- 기타
- v.empty() : 비어있는지 확인.
- v.swap(other) : other 벡터와 데이터 교환.
예제
#include <iostream>
#include <vector>
int main() {
std::vector<int> v; // 빈 벡터 생성
// 요소 추가
v.push_back(10);
v.push_back(20);
v.push_back(30);
// 요소 접근 및 출력
for (size_t i = 0; i < v.size(); ++i) {
std::cout << "v[" << i << "] = " << v[i] << std::endl;
}
// 크기 및 용량 확인
std::cout << "Size: " << v.size() << std::endl;
std::cout << "Capacity: " << v.capacity() << std::endl;
// 요소 제거
v.pop_back();
std::cout << "After pop_back, Size: " << v.size() << std::endl;
return 0;
}
(Output)
v[0] = 10
v[1] = 20
v[2] = 30
Size: 3
Capacity: 4
After pop_back, Size: 2
주의점
- 벡터의 크기가 증가할 때 내부적으로 메모리가 재할당되며, 이는 시간 비용이 발생할 수 있습니다. 이를 줄이기 위해 미리 reserve()를 호출해 용량을 확보할 수 있습니다.
- v[i]는 범위를 벗어난 접근에 대해 동작이 정의되지 않습니다. 대신 v.at(i)를 사용하면 예외를 발생시킵니다.
<vector>는 C++에서 가장 자주 사용되는 컨테이너 중 하나로, 다양한 상황에서 유용하게 활용됩니다.
반응형
'C_C++' 카테고리의 다른 글
C++, 텍스트 파일 저장 읽어오기 fstream (0) | 2024.11.21 |
---|---|
C++ 예외처리 Exception Handling (0) | 2024.11.20 |
C++, 클래스 템플릿 class template (0) | 2024.11.18 |
C++, 복사생성자 Copy Constructor (0) | 2024.11.17 |
C++, 클래스 생성자에서 동적메모리 사용하는 예 (0) | 2024.11.16 |