2026-03-11(수) vector알고리즘

조범근·2026년 3월 11일

TIL

목록 보기
16/25

C++ Week 2

vector 동적배열이 어떻게 생성되는지 알아보자

Study

C++ 문법 3주차 숙제, 알고리즘 2문제


Today I Learned


1. char 자료형에서 - a를 하면?

Problem

bool alphabet[26] = {false};
alphabet[word[i] - 'a'] = true;

word[i] - 'a'는 뭘까 뭔데 true일까

Reason

26개의 칸이 false로 초기화된 배열alphabet에서 word(받은 단어)[i] = true
wordstring자료형 이기 때문에 문자 하나인 word[i]char형태로 바뀜 word[0]이 a라고 치면
alphabet[ 'a' - 'a' ] = true; 즉, alphabet[0]일때 true라는것 b - a 는 1 이것은 ASCII코드로 바꾼 값 A= 65, a=97
소문자를 받으면 대문자로 바뀌게 하고싶다

char c = word[i];
if(c >= 'a' &&  c <= 'z')
	c-= 32;

97(a) - 65(A) 인 32를 c에서 빼주면 대문자가 나옴

Key Point

  • insert는 기존에 들어있는 데이터를 '원본'으로 간주하고 보호해야 할 때 사용.




Q2. v.reserve(n)로 미리 할당하지않고 그냥 유동적이게 쓰면 안되는 이유는 뭘까?

Problem

v.reserve(n)이 크기를 미리 할당해 놓는 거라면 왜 그래야 할까? 그냥 늘어나면 늘어나는대로 크기를 선언하지 않고 그냥 유동적으로 두면 편하지 않을까?
v.rserve(8)과 그냥 vector<int> vec; 선언해두고 나중에 push_back으로 공간을 채운다면 뭐가 다른걸까?

Reason

증가 계수가 2배라고 할때

  1. push_back(1): 공간 1개 할당. [1] (Capacity: 1)
  2. push_back(2): 공간 부족. **새 공간(2) 할당** → 기존 1 복사 → 기존 1 삭제 	[1, 2] (Capacity: 2)
  3. push_back(3): 공간 부족. **새 공간(4) 할당** → 기존 1, 2 복사 → 기존 1, 2 삭제	 [1, 2, 3] (Capacity: 4)

그냥 메모리가 늘어나는게 아니라 공간을 새로 할당할때마다 새로운 메모리에 복사를 하고 기존 메모리는 삭제를 한다는 것 즉, 이사 비용이 발생하게 된다 데이터가 단순히 3개가아니라 몇백만개라면 복사 비용을 무시할 수 없는 수준이 됨

Key Point

  • 크기를 알고 있다면 v.reserve(n) 의 n만큼 할당하고 push_back 해주면 됨





3. vector< int > vec(5)를 쓰면 되는거 아닌가 reserve는 언제 쓸까?

Problem

vector<int> vec(5) 이렇게 할당하는거랑 v.reserve(5)는 뭐가 다른건지 궁금해졌음

Reason

vector<int> vec(5);

  • 5개의 칸을 만들고 기본값(0으로 채움)
  • size 5
  • capacity 5
  • vec[0] = 10; (기존 값 덮어쓰기)
  • push_back을 한 경우 vec[5]로 6번째 공간에 들어감

vec.reserve(5);

  • 5개가 들어갈 공간만 확보 (빈 땅)
  • size 0 (아무것도 없음)
  • capacity 5
  • vec.push_back(10); (새로 집어넣기)
  • push_back을 한 경우 vec[0]으로 1번째 공간에 들어감

Key Point

  • 칸을 다채우고 싶으면 = vector<int> vec(5);
  • 칸은 일단 두고 그 뒤부터 쌓고 싶으면 = vec.reserve(5);
  • 몇 칸이 필요할지 몰라서 유동적으로 하고싶으면 = `vector vec;





4. for(int& x : )는 뭘까

Problem

for(int& x : scores)
	x += 5;

라는 것을 보고 뭔말인가 싶었음

Reason

일단 for( : ) 문은 "오른쪽에 있는 덩어리(scores)에서 알맹이를 하나씩 꺼내서 왼쪽에 선언한 변수(x)에 담아라"라고 약속되어 있다고 함
int& x = scores일때 int scores[4];가 있다고 치면 scores[0]에서 scores[3] 까지 다 한바꾸 돈다는 것
참조이기 때문에 원본 값에 +5임





개념 정리

	- A= 65, a= 97
	- char 자료형일때 word[i] - 'a' = 하면 숫자를 얻을 수 있음 0 ~ 26
 		ex) char = a; 일때 char -= 32; == A

0개의 댓글