728x90
동적 배열과 std::vector
∙ 동적 메모리 할당(dynamic memory allocation)
- 프로그램 실행 중 필요한 크기의 메모리 공간을 할당하여 사용하는 기법
- 동적으로 할당한 메모리는 사용이 끝나면 명시적으로 (할당된) 메모리를 해제해야 한다.
- C언어 : malloc() 또는 calloc() 함수로 메모리 할당하고, free() 함수로 메모리 해제
- C++언어 : new 연산자로 메모리 할당하고, delete 연산자로 메모리 해제
∙ 동적 메모리 할당을 이용한 동적 배열 생성 및 해제
- new [] 연산자를 이용하여 동적 배열을 위한 메모리를 할당하고, delete [] 연산자를 이용하여 동적 배열 메모리를 해제
- 동적 메모리 할당은 힙 메모리 영역을 사용하므로 대용량 배열도 할당 가능
// 동적 메모리 할당 예시 코드
#include <iostream>
using namespace std;
int main()
{
int* ptr = new int[3];
ptr[0] = 10;
ptr[1] = 20;
for (int i = 0; i < 3; i++){
cout << ptr[i] << endl;
}
delete [] ptr;
ptr = nullptr;
}
∙ std::vector란?
- C++에서 C스타일 배열을 대처하는 가변 크기 컨테이너
> 초기화 과정에 데이터의 크기를 지정하지 않아도 됨
> 배열의 크기를 확장할 수 있음
- 원소의 타입을 매개변수로 사용하는 클래스 템플릿
- <vector>에 정의되어 있음
//vector 예시 코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1;
v1.push_back(10); //v1[0]
v1.push_back(20); //v1[1]
v1.push_back(30); //v1[2]
vector<int> v2(10); //v2[0] ~ v2[9]
vector<int> v3 {10, 20, 30, 40, 50};
vector<int> v4 = v3;
}
- 2차원 벡터 생성과 원소 참조
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//2행 3열
vector<vector<int> > mat1(2, vector<int>(3));
vector<vector<int> > mat2 {
{1, 2, 3},
{4, 5, 6}
};
for (int r = 0 ; r < mat2.size(); r++){
for(int c = 0; c < mat2[r].size(); c++){
cout << mat2[r][c] << ", ";
}
cout << endl;
}
}
∙ std::vector 주요 멤버 함수와 기능
멤버 함수 | 설명 |
operator [] | 특정 위치 원소의 참조를 반환 |
front() | 첫 번째 원소의 참조를 반환 |
back() | 마지막 원소의 참조를 반환 |
push_back() | push_back()과 같지만 객체의 복제나 이동이 없어서 효율적 |
pop_back() | 마지막 원소를 삭제 (마지막 원소를 반환하지 않음) |
insert() | 특정 위치에 원소를 삽입 |
erase() | 특정 위치의 원소를 삭제 |
clear() | 모든 원소를 삭제 |
size() | 원소의 개수를 반환 |
empty() | 벡터가 비어 있으면 true를 반환 |