Menu
Coddy logo textTech

C++ 치트시트

마지막 업데이트

Hello World 및 프로그램 구조

실행은 int를 반환하는 main에서 시작합니다.

요소코드
헤더 포함#include <iostream>
진입점int main() { ... }
한 줄 출력std::cout << "Hello, World!" << std::endl;
입력 읽기std::cin >> x;
std 네임스페이스 사용using namespace std;
성공 반환return 0;
주석// line 그리고 /* block */

자료형

타입설명
int정수 (보통 32비트)
long / long long더 넓은 정수
float / double부동소수점 숫자
char단일 바이트 / 문자
booltrue 또는 false
std::string<string>의 동적 텍스트
auto컴파일러가 타입을 추론
std::size_t크기와 인덱스용 부호 없는 타입

변수 및 참조

참조는 별칭이고, 포인터는 주소를 담습니다.

작업문법
선언 및 초기화int x = 5;
중괄호 초기화int x{5};
상수const double PI = 3.14159;
컴파일 타임 상수constexpr int N = 10;
참조 (별칭)int &r = x;
포인터int *p = &x;
포인터 역참조*p = 10;
타입 추론auto y = 3.14;

제어 흐름

문(statement)문법
if / elseif (x > 0) { ... } else { ... }
switchswitch (n) { case 1: ...; break; default: ...; }
while 반복문while (i < n) { ... }
do-while 반복문do { ... } while (i < n);
for 반복문for (int i = 0; i < n; i++) { ... }
범위 기반 forfor (auto x : vec) { ... }
참조로 받는 범위 기반 forfor (auto &x : vec) { ... }
break / continuebreak;는 반복문을 빠져나가고, continue;는 다음 반복으로 건너뜀

함수

작업문법
함수 정의int add(int a, int b) { return a + b; }
반환값 없음void greet() { ... }
기본 인자int pow(int b, int e = 2) { ... }
참조로 전달void inc(int &x) { x++; }
const 참조 (복사 없음)void print(const std::string &s) { ... }
오버로딩int max(int a, int b);double max(double a, double b);
람다auto f = [](int x) { return x * 2; };
캡처가 있는 람다auto g = [n](int x) { return x + n; };

클래스 및 객체 지향(OOP)

작업문법
클래스 정의class Dog { ... };
접근 지정자public:, private:, protected:
멤버 변수std::string name;
생성자Dog(std::string n) : name(n) {}
소멸자~Dog() { ... }
멤버 함수void bark() { ... }
객체 생성Dog d("Rex");
상속class Puppy : public Dog { ... };
가상 함수virtual void speak();

STL 컨테이너

표준 라이브러리의 자주 쓰는 컨테이너.

컨테이너사용법 및 예시
std::vector<int>동적 배열: v.push_back(1); v.size();
std::string텍스트: s += "!"; s.length();
std::array<int, 3>크기 정보가 있는 고정 크기 배열
std::map<K, V>정렬된 키-값: m["a"] = 1;
std::unordered_map<K, V>해시 맵 (조회가 빠르고 순서 없음)
std::set<T>정렬된 고유 값: s.insert(5);
std::pair<A, B>두 값: make_pair(1, "x")
std::queue / std::stackFIFO 큐 / LIFO 스택 어댑터

STL 알고리즘 및 반복자

<algorithm>에서 가져오며, 대부분 begin/end 반복자 범위를 받습니다.

작업문법
begin / end 반복자v.begin(), v.end()
정렬std::sort(v.begin(), v.end());
내림차순 정렬std::sort(v.begin(), v.end(), std::greater<int>());
값 찾기auto it = std::find(v.begin(), v.end(), 5);
일치 개수 세기std::count(v.begin(), v.end(), 5);
최소 / 최대 원소std::max_element(v.begin(), v.end());
범위 합산std::accumulate(v.begin(), v.end(), 0);
각 원소 변환std::transform(v.begin(), v.end(), v.begin(), fn);

스마트 포인터 및 모던 C++

자동 정리를 위해 원시 new/delete보다 스마트 포인터를 선호하세요.

기능문법
단독 소유권auto p = std::make_unique<Dog>("Rex");
공유 소유권auto p = std::make_shared<Dog>("Rex");
소유하지 않는 참조std::weak_ptr<Dog> w = p;
이동 시맨틱auto v2 = std::move(v1);
nullptrint *p = nullptr;
구조적 바인딩auto [key, val] = *it;
선택적 값std::optional<int> maybe;
템플릿template <typename T> T add(T a, T b) { return a + b; }

가장 자주 쓰는 C++ 문법, STL 컨테이너, 최신 기능을 한 페이지에 담았습니다. 이 C++ 치트시트는 C++를 작성하기 위한 빠른 참조 자료입니다 - 자료형, 참조, 클래스, 표준 라이브러리 컨테이너와 알고리즘, 그리고 원시 new/delete를 대체하는 스마트 포인터를 다룹니다.

여기 나오는 모든 내용은 표준 C++(C++11 이상)이며 g++clang++로 컴파일됩니다. 필요한 것을 복사하거나, C++ 플레이그라운드에서 어떤 코드든 바로 실행해 보세요 - 컴파일러를 설치할 필요가 없습니다.

C++ 치트시트 자주 묻는 질문

이 C++ 치트시트는 무료인가요?
네. 이 C++ 치트시트는 완전히 무료이며 회원 가입이 필요 없습니다. 즐겨찾기에 추가해 두고 문법, STL 컨테이너, 스마트 포인터를 찾아봐야 할 때마다 다시 방문하세요.
C++에서 포인터와 참조의 차이는 무엇인가요?
포인터는 주소를 담는 변수입니다. null일 수 있고, 다른 곳을 가리키도록 재할당할 수 있으며, *p로 역참조합니다. 참조(int &r = x)는 기존 변수의 별칭입니다 - 선언할 때 반드시 바인딩해야 하고, null이 되거나 다시 바인딩될 수 없으며, 변수 자체처럼 사용됩니다. 더 깔끔한 참조 전달 매개변수에는 참조를, 선택적이거나 재할당 가능한 간접 참조가 필요할 때는 포인터를 사용하세요.
new/delete를 써야 하나요, 스마트 포인터를 써야 하나요?
스마트 포인터를 선호하세요. std::unique_ptrstd::shared_ptr(make_unique/make_shared를 통해)는 스코프를 벗어날 때 메모리를 자동으로 해제하므로, 수동 new/delete에서 발생하는 누수와 이중 해제를 방지합니다. 원시 new/delete는 특정한 이유가 있는 저수준 코드에서만 사용하세요.
C++를 온라인에서 연습할 수 있나요?
네. C++ 플레이그라운드를 열어 이 치트시트의 어떤 코드든 브라우저에서 컴파일하고 실행해 보세요 - 컴파일러를 설치할 필요가 없습니다. 체계적으로 배우고 싶다면, Coddy의 무료 인터랙티브 C++ 강좌가 변수와 반복문부터 클래스와 STL까지 단계별로 안내합니다.
이 치트시트는 초보자에게 적합한가요?
네. 가장 흔한 구성 요소(타입, 제어 흐름, 함수)부터 고급 요소(STL과 스마트 포인터)까지 순서대로 정리되어 있어, 첫날부터 상단 섹션을 사용하고 점차 나머지로 넓혀갈 수 있습니다.
Coddy programming languages illustration

Coddy로 C++ 배우기

시작하기