TIL_020: 반복자vs인덱스, 문자열 비교, 자료구조 선택

김펭귄·2025년 8월 25일

Today What I Learned (TIL)

목록 보기
20/142

오늘 학습 키워드

  • for문 반복자 vs 인덱스

  • 문자열 비교

1. for문 반복자 vs 인덱스

  • for문을 돌릴 때 반복자로 돌리는 방법과, int i = 0부터 해당 컨테이너의 size까지 돌리는 방법 2가지 존재

for문 반복자

for (const auto& elem : container) { ... }
  • 모든 STL 컨테이너에서 사용 가능 (vector, list, set, map 등)

  • 컨테이너가 인덱스 기반 접근을 지원하지 않아도 순회 가능

  • 인덱스 값을 못 씀

for문 인덱스

for (int i = 0; i < container.size(); i++ {...}
  • 인덱스가 자주 필요한 경우 사용

  • vector, array 등 랜덤 엑세스가 가능한 컨테이너에서 성능이 매우 좋음

  • list, set, map 등 인덱스 기반 접근이 불가능한 컨테이너에는 사용 불가

for문 일반 반복자

for (auto it = s.begin(); it != s.end(); it++) {...}
  • 어떤 컨테이너든 일관되게 순회

  • 인덱스, 값 둘 다 접근 가능

  • 대신 인덱스와 값에 접근하는데에 코드가 더 많이 듦

결론

  • 상황에 따라 코드가 더 간단한 걸로 쓰자

2. 문자열의 비교

  • C++에서의 string은 직접 비교연산자를 쓸 수 있다

  • 다만, 사전식 비교를 하기 때문에 "4"가 "10"보다 크다고 봄

if ("4" > "10") cout << "true";

문자 종류 확인

  • #include <cctype> 해서 사용

  • islower(int c) : 소문자(a~z)면 true, 아니면 false 반환

  • isupper(int c) : 대문자(A~Z)면 true) 반환

  • isdigit(int c) : 문자가 숫자('0'~'9')이면 true, 아니면 false 반환

  • isxdigit(c) : 문자가 16진수 숫자(0-9, a-f, A-F)인지 확인

  • isalpha(int c) : 알파벳 문자이면 true

  • isspace(int c) : 모든 공백 문자(스페이스, 탭, 개행 문자 등)이면 true

  • isblank(int c) : blank(스페이스(' ')와 수평 탭('\t')만)인지 확인

  • isalnum(c) : 문자가 알파벳(A-Z, a-z) 또는 숫자(0-9)인지 확인

  • ispunct(c) : 문자가 구두점 문자(콤마, 마침표 등)인지 확인

  • isprint(c) : 문자가 공백을 포함한 인쇄 가능한 문자인지 확인

  • isgraph(c) : 문자가 공백이 아닌 인쇄 가능한 문자인지 확인

  • toupper(c) : 문자면 대문자로, 아니면 그냥 반환

  • tolower(c) : 문자면 소문자로, 아니면 그냥 반환

3. 자료구조 선택법

profile
반갑습니다

0개의 댓글