반응형
C++에서 vector와 array는 모두 데이터를 저장하는 컨테이너로 사용되지만, 각각의 특성과 사용법에는 차이가 있습니다. 여기서는 std::vector와 C 스타일 배열을 비교하고, 각각의 장단점을 설명하겠습니다.
Vector
장점
- 동적 크기 조정: vector는 필요에 따라 자동으로 크기를 조정할 수 있습니다. 요소를 추가하거나 제거할 때 자동으로 메모리를 관리합니다.
- 안전성: vector는 범위 검사, 예외 처리 등을 제공하여 더 안전한 코드 작성을 돕습니다. 예를 들어, at 메서드는 범위 밖의 인덱스에 접근하면 예외를 발생시킵니다.
- 풍부한 인터페이스: 다양한 메서드(push_back, pop_back, insert, erase 등)를 통해 유연하게 데이터를 조작할 수 있습니다.
- 표준 라이브러리 통합: STL의 다른 컨테이너 및 알고리즘과 쉽게 통합할 수 있습니다.
단점
- 성능 오버헤드: 동적 메모리 할당 및 범위 검사 등으로 인해 Array보다 약간의 성능 오버헤드가 발생할 수 있습니다.
- 메모리 사용: 추가적인 메타데이터와 동적 메모리 할당으로 인해 Array보다 더 많은 메모리를 사용할 수 있습니다.
Array
장점
- 고정된 크기: 컴파일 타임에 크기가 고정되어 있어 메모리 할당이 효율적입니다.
- 성능: 불필요한 오버헤드가 없어서 매우 빠르고, 특히 성능이 중요한 상황에서 유리할 수 있습니다.
단점
- 고정된 크기: 배열의 크기가 고정되어 있어, 실행 중에 크기를 변경할 수 없습니다.
- 안전성 부족: 배열은 범위 검사 등을 제공하지 않아, 잘못된 인덱스 접근으로 인해 메모리 오버플로우 등의 문제가 발생할 수 있습니다.
- 메모리 관리: 동적 할당된 배열의 경우, 메모리 관리를 직접 해야 하며, 메모리 누수 등의 위험이 있습니다.
- 인터페이스 부족: vector와 같은 풍부한 메서드를 제공하지 않아서, 많은 기능을 직접 구현해야 합니다.
예제 코드 비교
Vector 예제
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers;
// Vector 추가
numbers.push_back(1);
numbers.push_back(2);
numbers.push_back(3);
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// Vector 제거
numbers.pop_back();
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
Vector 결과
1 2 3 // push_back
1 2 // pop_back
Array 예제
#include <iostream>
int main() {
// 배열 3개 선언
int numbers[3] = {1, 2, 3};
for (int i = 0; i < 3; ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// 배열 크기는 고정되어 있어서
// pop_back과 같은 동작을 흉내내려면 직접 구현해야 합니다.
// for loop 의 조건 i < 2 이므로, 배열[0], [1] 만 출력
int newSize = 2;
for (int i = 0; i < newSize; ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
요약
- **std::vector**는 동적 크기 조정, 안전성, 유연한 인터페이스 등으로 일반적인 경우에 더 많이 사용됩니다.
- C 스타일 배열은 고정된 크기, 성능, 메모리 효율성 등의 장점으로 인해 성능이 중요한 경우에 적합합니다.
사용하려는 상황에 맞게 적절한 컨테이너를 선택하는 것이 중요합니다.
반응형
'C++ 공부' 카테고리의 다른 글
[C++]while 조건문에 '>>' 가 있는 경우는? (0) | 2024.07.28 |
---|---|
[C++]String 의 find 함수 정의, string::npos 란?(프로그래머스-문자열 바꿔서 찾기) (0) | 2024.07.28 |
[C++]String 의 replace(), regex_replace() 함수 정의, 비교 (0) | 2024.07.27 |
[C++]Sort 함수란? 정렬, 오름차순, 내림차순 (0) | 2024.07.27 |
[C++]Vector 정의, push_back 등 주요 함수 정리 (0) | 2024.07.27 |
댓글