키워드: range-based for / auto / decltype / std::string / ispunct·isalpha… / 참조로 순회 / [] 서브스크립트 / UB(범위 밖 접근) / std::vector / push_back / begin·end·cbegin·cend / 반복자 연산 / 원시 배열·포인터 / C-string(cstring) / 다차원 배열
range-based for: for (auto c : s) → 요소를 순서대로 꺼냄. 수정하려면 for (auto& c : s) 처럼 참조로 받아야 원본이 바뀐다.
문자 분류/변환: ispunct, isalpha, isdigit, islower, toupper 등으로 문장부호 세기 / 대소문자 변환 가능.
std::string 접근: s[i]는 size_t 인덱스를 받는다. 범위 밖 혹은 빈 문자열 서브스크립트는 UB(표준이 동작 미정).
전통적 for: 인덱스는 보통 decltype(s.size())/size_t로. 조건은 i != s.size() 같은 범위 조건 권장.
std::vector<T>: 가변 길이 컨테이너. push_back으로 끝에 추가. 서브스크립트는 요소를 “추가”하지 않는다 → 비어있을 때 v[0]는 런타임 에러.
반복자(iterator): begin()/end()가 첫 요소 / 마지막 다음(one-past-end) 반복자 반환. 역참조 it, 멤버 접근 it->empty() 등. 수정 불가 뷰는 cbegin()/cend().
배열과 포인터: 배열 이름은 첫 요소 포인터로 decay. 포인터 산술로 순회(동일 배열 내에서만 유효). 포인터 차이는 요소 간 거리(ptrdiff_t).
C-string vs std::string: C-string은 널 종료 문자 필요. 비교/연결은 <cstring>의 strcmp/strcat 등 사용. std::string과 섞을 땐 c_str()로 변환.
다차원 배열: “배열의 배열”. 바깥 루프는 참조로 받아야(배열은 복사 불가) 내부 요소에 접근·수정 가능.