반응형
C++에서 vector는 가장 기본이 되는 동적 배열입니다. 크기가 자동으로 조정되며, 배열과 달리 메모리를 직접 관리할 필요가 없습니다. 오늘은 vector의 모든 사용법을 C 스타일 입출력과 함께 정리해보겠습니다.
1. Vector란?
- C++ STL에서 제공하는 동적 배열입니다.
- 크기가 자동으로 조정되며, 삽입, 삭제, 접근이 간편합니다.
- 다양한 메서드를 제공하며, 코드 작성의 생산성을 높여줍니다.
2. Vector 선언과 초기화
기본 선언
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v; // 빈 벡터 선언
return 0;
}
초기화 방법
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v1(5); // 크기가 5인 벡터 (0으로 초기화)
vector<int> v2(5, 10); // 크기가 5인 벡터 (모든 값이 10)
vector<int> v3 = {1, 2, 3}; // 리스트 초기화
return 0;
}
반응형
3. Vector 주요 메서드
push_back()와 pop_back()
- push_back(): 벡터의 끝에 요소를 추가합니다.
- pop_back(): 벡터의 마지막 요소를 제거합니다.
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v;
v.push_back(10);
v.push_back(20);
printf("v[0]: %d, v[1]: %d\n", v[0], v[1]);
v.pop_back();
printf("Size after pop_back: %zu\n", v.size());
return 0;
}
size()와 capacity()
- size(): 벡터에 저장된 요소의 개수를 반환합니다.
- capacity(): 벡터의 현재 용량을 반환합니다.
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v(10, 5); // 크기 10, 값 5로 초기화
printf("Size: %zu, Capacity: %zu\n", v.size(), v.capacity());
v.push_back(15);
printf("Size: %zu, Capacity: %zu\n", v.size(), v.capacity());
return 0;
}
clear()와 empty()
- clear(): 모든 요소를 제거합니다.
- empty(): 벡터가 비어 있는지 확인합니다.
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
printf("Before clear: Size: %zu\n", v.size());
v.clear();
printf("After clear: Size: %zu, Is empty: %d\n", v.size(), v.empty());
return 0;
}
4. Vector 탐색과 반복자
반복자 사용
- begin(): 첫 번째 요소를 가리키는 반복자 반환
- end(): 마지막 요소의 다음을 가리키는 반복자 반환
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v = {10, 20, 30};
for (auto it = v.begin(); it != v.end(); ++it) {
printf("%d ", *it);
}
printf("\n");
return 0;
}
참고) auto에 대한 설명: auto는 반복자의 정확한 타입을 추론하여 간결한 코드 작성을 도와줍니다. 위의 코드에서 it는 std::vector<int>::iterator로 추론됩니다.
범위 기반 for문
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v = {10, 20, 30};
for (int num : v) {
printf("%d ", num);
}
printf("\n");
return 0;
}
5. Vector 정렬과 알고리즘
정렬(Sort)
- STL의 sort()를 사용해 벡터를 정렬할 수 있습니다.
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v = {30, 10, 20};
sort(v.begin(), v.end());
for (int num : v) {
printf("%d ", num);
}
printf("\n");
return 0;
}
역순 정렬(Descending Order)
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v = {30, 10, 20};
sort(v.begin(), v.end(), greater<int>());
for (int num : v) {
printf("%d ", num);
}
printf("\n");
return 0;
}
6. 기타 유용한 메서드
resize()
- 벡터의 크기를 변경합니다.
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
v.resize(5, 0); // 크기를 5로 조정하고 새 값은 0으로 초기화
for (int num : v) {
printf("%d ", num);
}
printf("\n");
return 0;
}
erase()와 insert()
- erase(): 특정 위치의 요소 제거
- insert(): 특정 위치에 요소 삽입
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4};
v.erase(v.begin() + 1); // 두 번째 요소 제거
v.insert(v.begin() + 1, 10); // 두 번째 위치에 10 삽입
for (int num : v) {
printf("%d ", num);
}
printf("\n");
return 0;
}
반응형
'STL' 카테고리의 다른 글
코딩테스트에서 자주 쓰이는 STL 총정리 (1) | 2024.12.23 |
---|---|
STL set 구조체 활용(4) - 특정 원소에 빠르게 찾기 (0) | 2023.04.03 |
STL set 구조체 활용(3) - set에 구조체 포인터 담기 (0) | 2023.03.30 |
STL set 구조체 활용 (2)- 정렬 기준 바꾸기 (0) | 2023.03.30 |
STL set 구조체활용(1) - 사용법(set은 만능이다?) (0) | 2023.03.13 |
댓글