일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 추상적 자료형
- JS
- JavaScript
- 코드잇TIL
- 노트북램교체
- 코테준비
- Unity
- 어도비
- LinkedList
- unityC#
- 삼성노트북
- 시간복잡도
- 삼성노트북하판
- 자료구조
- 코테
- 코드잇
- 스톡
- M1W
- 긱바
- 브론즈
- 몬스긱
- 코딩공부
- GMK67
- 노트북SSD교체
- 자바스크립트
- 기계식키보드
- solved.ac
- 백준
- 오늘도코드잇
- ADT
- Today
- Total
SKYLIGHT STUDIO
[C++ 리바이브] C++ 동적 배열 본문
다 알고 있겠지만 C++는 일반적인 방법으로 동적 배열을 사용할 수 없다. 유니티가 쓰기 쉬운 이유 중 하나.
C++에서는 std::vector을 사용해야 하며, 이 배열을 사용해야 비로소 크기를 동적으로 줄이거나 늘릴 수 있다.
일반적인 포인터를 이용한 동적 배열과는 조금 결이 다르며, 일단 이 특징부터 살펴볼 것이다.
#include <vector>
using namespace std;
vector<int> v;
v.push_back(10); // 벡터에 10을 추가
v.push_back(20);
일반적으로 이렇게 사용한다.
1. 템플릿 클래스
vector<int> v1; // 정수형 벡터
vector<string> v2; // 문자열형 벡터
vector<float> v3; // 실수형 벡터
어떤 자료형이든 사용할 수 있는 템플릿 클래스.
2. 자동 메모리 관리
정확히는 스코프(scope)가 끝나면 알아서 메모리에서 해제된다. 포인터 배열처럼 따로 delete[]를 해줄 이유가 없는 것.
3. 메소드
일단 배열처럼 작동하긴(랜덤 액세스로 인덱스를 통한 접근도 똑같이 가능. 시간 복잡도도 O(1)) 하지만, 일반적으로 사용할 수 있는 메소드들도 존재한다.
push_back()
v.push_back(10); // 벡터에 10을 추가
v.push_back(20); // 벡터에 20을 추가
벡터에 요소를 추가할 때 사용하는 메소드. 뭔가 자료구조 하면서 기시감을 느낀 사람이 많을 지도.
pop_back()
v.pop_back(); // 벡터의 마지막 요소 삭제
벡터의 마지막 요소를 제거한다.
벡터 초기화
vector<int> v(5, 0); // 5개의 0으로 초기화된 벡터 생성
이건 메소드가 아니긴 하지만...
벡터를 선언할 때 특정 크기와 초기값으로 초기화할 수 있다는 것.
반복자(iterator)
for (auto it = v.begin(); it != v.end(); ++it) {
cout << *it << " "; // 각 요소 출력
}
전통적인 for문을 사용하려면 배열의 크기를 확인해야 하는 이슈가 생기기에 이런 식으로도 처리하는 것.
v.begin은 벡터의 시작, v.end는 벡터의 끝이며, 이를 이용해 전체를 순회할 수 있다.
정렬
sort(v.begin(), v.end()); // 벡터의 모든 요소를 오름차순으로 정렬
오름차순으로 정렬해주는 메소.
예약
일단 이 메소드를 다루기 전에 내부적인 특징을 더 하나 짚어야 한다.
처음에 벡터는 기본 크기의 메모리를 할당받는다. 요소를 추가하다가 할당된 메모리가 가득 차면, 더 큰 메모리 블록을 할당하고 기존 데이터를 복사한 후, 원래의 메모리는 해제하는 식으로 굴러간다.
당연히 이러면 퍼포먼스가 낮아지이게 일단 크게 부르는 식으로 메모리를 '예약'할 수 있는 것.
v.reserve(1000); // 1000개의 요소를 미리 저장할 수 있도록 메모리 예약
size()
vector<int> v = {10, 20};
cout << v.size(); // 출력: 2
'Computer Programming > Coding Test(C++)' 카테고리의 다른 글
[C++/1076] 저항 (0) | 2024.10.08 |
---|---|
[C++][2547] 사탕 선생 고창영 (1) | 2024.10.02 |
[C++][1267] 핸드폰 요금 (0) | 2024.10.01 |
[C++][1264] 모음의 개수 (0) | 2024.09.29 |
[C++ 리바이브] Stream, Cout, Cin (0) | 2024.09.26 |