: 메모리 공간에서 배열 원소의 배치
: 컴파일 시점에 크기가 정해지면 더 이상 변경이 될 수 없다.
: 컴파일 시점에 arr이라는 배열의 크기가 정해지는 코드
#include <array>
#include <iostream>
int main(){
std::array <int, 5> arr = {1,2,3,4,5};
for(auto &element : arr){
std::cout << element << " ";
}
std::cout << std::endl;
return 0;
}
✔️ std::array를 사용하여 Type은 Int이고, 크기는 5인 배열(arr) 선언
✔️ 생성된 배열의 크기는 컴파일이 될 때 정해지게 된다.

: Program이 실행되는 run time에 크기를 자유 자재로 변경할 수 있음
: C/C++에서 동적으로 배열을 사용하고자 할 때는 new(또는 malloc) 키워드를 사용하여 새롭게 메모리를 할당하여 사용할 수 있다.
: 필요한 크기만큼 사용할 때마다 메모리를 받아서 쓰는 코드
#include <iostream>
int main() {
int size = 10; // 원하는 크기 만큼 사이즈를 정할 수 있음
//std::cin >> size; 이렇게도 값을 입력 받는 것도 가능
std::cout << "Enter the size of the array: ";
// 크기 만큼 myArray 포인터를 생성
int *myArray = new int[size];
// 생성 후 0으로 초기화
for (int i = 0; i < size; i++) {
myArray[i] = 0;
}
// 생성된 배열을 사용
// 사용이 끝나고, main이 끝나는 시점에서 delete하여 할당된 메모리 삭제
delete[] myArray;
return 0;
}
✔️ myArray는 크기가 10인 integer 배열이 되는 것입니다. 또한 이때 배열은 heap 영역에 할당된다.

✔️ new() 키워드를 사용할 때는 delete를 꼭 적절하게 해주어 메모리 누수를 방지해야 한다.
✔️ 프로그램을 짜다 보면 delete가 되기 전에 종료되는 경우가 있다.
-> 이를 방지하기 위해 스마트 포인터를 사용하는 방법도 있고, std::vector 을 사용하는 방법도 있다.
✔️ std::vector를 사용하면 더욱 쉽게 동적으로 사용할 수 있고, 값을 push, pop 하는 것은 당연히 가능하고, resize() 함수를 통해서 배열의 크기를 변경하는 것이 가능합니다.
: std::vector 사용 코드
#include <iostream>
#include <vector> // std::vector 사용하기 위해 include 필요
int main() {
int size = 10; // 원하는 크기 만큼 사이즈를 정할 수 있음.
//std::cin >> size; 로 값을 입력 받는 것도 가능
std::cout << "Enter the size of the array: ";
// 크기 만큼 myVector vector를 생성하고, 0으로 초기화
std::vector<int> myVector(size, 0);
// 생성된 벡터를 사용..
// 사용이 끝나고, main이 끝나는 시점에서 delete할 필요 없이 자동으로 없어짐
return 0;
}
메모리가 할당된 상태는 아래와 같다. 동일하게 Heap 영역에 동적으로 할당된다.

선언된 vector를 20만큼의 크기를 갖게 하려면 resize() 함수를 사용하면 쉽게 크기를 변경할 수 있다.
// myVector의 크기를 20으로 resize
myVector.resize(20);

참고: 코딩 샐러드 블로그 | https://blog.naver.com/kut_da_92/223157103004