코딩 뉴비의 공부 정리 및 기록용 포스트입니다.
잘못된 내용을 바로잡아주시면 감사하겠습니다.
C++ 배열 (Arrays)
배열 선언하기
특정 자료형 값들의 집합체인 배열을 선언한다.
자료형
배열 이름
배열 길이
; 의 형식으로 선언한다.
1
2
int num[3];
string fruits[3];
선언할 때 특정 값을 할당할 수 있다.
1
2
int num[3] = {1, 2, 3};
string fruits[3] = {apple, melon, banana};
특정 값을 부여하며 선언할 때에는 배열의 크기를 생략해도 된다. 컴파일러가 자동으로 값들을 읽어 크기를 결정한다.
1
int num[] = {1, 2, 3};
배열의 값 참조하기
다음과 같이 배열의 값을 참조한다.
1
2
3
int num[3] = {1, 2, 3};
cout << num[0]; // 1
배열의 인덱스는 0부터 시작한다.
같은 방식으로 배열 내부의 값을 변경한다.
1
2
3
num[0] = 100;
cout << num[0]; // 100
배열의 크기 얻기
1. sizeof()
sizeof()
연산자를 사용해서 배열의 크기를 알아낼 수 있다.
sizeof(array)
는 배열의 전체 크기를 바이트 단위로 반환하므로 해당 배열을 구성하는 자료형의 크기로 나누어주어야 한다.
1
2
3
int arr[3] = {1, 2, 3};
cout << sizeof(arr) << '\n'; // 12
cout << sizeof(arr) / sizeof(int); // 3 -> ( 12 / 4 )
2. std::array
<array>
헤더파일을 추가한다.
1
2
int arr[3] = {1, 2, 3};
cout << arr.size() << '\n'; // 3
다차원 배열 (Multi-Dimensional Arrays)
배열의 각 요소를 배열로 설정할 수 있다.
1
2
3
4
5
6
7
8
string letters[2][4] = {
{"A", "B", "C", "D"},
{"E", "F", "G", "H"}
};
cout << letters[0][0] << endl; // A
cout << letters[1][0] << endl; // E
cout << letters[1][3] << endl; // H
C++ vector
벡터 vector
는 메모리를 자동으로 할당하는 배열의 일종이다.
먼저 헤더파일을 추가한다.
1
#include <vector>
벡터 선언
1
2
3
4
5
vector<int> v1;
vector<int> v2 = {1, 2, 3, 4, 5};
vector<int> v3 {1, 2, 3, 4, 5};
<>
내부에 자료형, 뒤에는 벡터 이름을 붙인다.
다음과 같은 방식으로 세부사항을 추가하여 선언할 수 있다.
1
2
3
4
5
6
7
vector<int> v = {1, 2, 3, 4, 5};
vector<int> v {1, 2, 3, 4, 5}; // 내부 값 초기화
vector<int> v(5); // 0으로 초기화된 5개 원소의 vector v 생성
vector<int> v(5, 2); // 2로 초기화된 5개 원소의 vector v 생성
vector<int> v2(v); // v vector를 복사해서 v2 vector 생성
벡터의 요소 관련 함수
1
vector<int> v;
Function | Description |
---|---|
v.assign(5, i) |
5개의 원소를 i로 할당 |
v.at(index) |
indxe의 요소를 참조. 범위의 유효성을 검사 |
v[index] |
index의 요소를 참조. 범위의 유효성을 검사하지 않으므로 at(idx) 보다 속도가 더 빠름 |
v.front() |
첫번째 요소를 참조. |
v.back() |
마지막 요소를 참조. |
v.clear() |
모든 요소를 제거. 메모리는 남아있음 |
v.push_back(i) |
벡터의 끝에 i를 추가. |
v.pop_back() |
벡터의 마지막 요소를 제거. |
v.insert(p1, p2, p3) |
p1번째 위치에 p2개의 p3를 삽입. p3를 생략하면 한개의 p2를 삽입. |
v.resize(n) |
벡터의 크기를 n으로 변경함. 크기가 기존보다 작아지면 뒤의 값부터 삭제, 기존보다 커지면 기본값 0으로 초기화 |
v.resize(n, i) |
벡터의 크기를 n으로 변경함. 크기가 기존보다 커질 때 초기화되는 값을 i로 설정 |
v.size() |
벡터의 크기를 반환함. |
예시
1
2
v.at(0) = 100;
cout << v.at(0) << endl; // 100
1
2
3
4
5
6
vector<int> v1 = {1, 2, 3, 4, 5};
v1.resize(3); // v1 = {1, 2, 3}
v1.resize(5, 10); // v1 = {1, 2, 3, 10, 10}
v1.insert(0, 2, 0); // v1 = {0, 0, 1, 2, 3, 10, 10}