bool Twenty::isValid(std::string s)
{
std::stack<char> cs;
for (char c : s)
{
if (cs.empty())
{
cs.push(c);
}
// 아래 3개 묶었으면 좋았을듯
else if (c == ')')
{
if (cs.top() == '(') cs.pop();
else return false;
}
else if (c == '}')
{
if (cs.top() == '{') cs.pop();
else return false;
}
else if (c == ']')
{
if (cs.top() == '[') cs.pop();
else return false;
}
else
{
cs.push(c);
}
}
if (!cs.empty()) return false;
else return true;
}
#include <stack>
std::stack<int> s;
| 함수 | 설명 |
|---|---|
s.push(x) | 원소 삽입 (맨 위에 추가) |
s.pop() | 맨 위 원소 제거 |
s.top() | 맨 위 원소 접근 |
s.empty() | 비었는지 여부 확인 |
s.size() | 현재 원소 수 반환 |
| 저장 영역 | 예시 | 초기화 여부 | 비고 |
|---|---|---|---|
| 로컬 변수 (자동 저장소) | 함수 내부 int x; | ❌ 안 됨 (쓰레기 값) | 반드시 수동 초기화 필요 |
| 글로벌 변수 | 파일 최상단 int x; | ✅ 자동 0 초기화 | 명시 안 해도 안전 |
| 정적 변수 | static int x; | ✅ 자동 0 초기화 | 함수 안에 있어도 정적으로 취급 |
| 클래스 멤버 변수 | class A { int x; }; | ❌ 기본적으로 안 됨 | 생성자에서 직접 초기화해야 함 |
std::stack 같은 건 객체라서 생성자에 의해 자동으로 초기화된다. 그래서 로컬 변수여도 초기화됨. 기본 타입은 생성자 없으므로 로컬 변수일 때 수동 초기화해야됨.
Direct3D 12 특징
COM(Component Object Model)
delete로 삭제하지 않고 Release 메서드를 호출한다Microsoft::WRL::ComPtr은 COM 객체를 위한 스마트 포인터다.Get : root COM 인터페이스를 가리키는 포인터 반환GetAddressOf : root COM 인터페이스를 가리키는 포인터의 포인터 반환Reset : ComPtr 인스턴스를 nullptr로 설정하고 root COM 인터페이스의 참조 횟수를 1 감소한다. (직접 nullptr 배정해도 참조 횟수 감소)텍스처
DXGI_FORMAT_으로 시작하는 자료형만 담을 수 있다.교환 사슬과 페이지 전환
IDXGISwapChain::ResizeBuffers : 버퍼 크기 변경 메서드IDXGISwapChain::Present : 버퍼 제시 메서드깊이 버퍼
DXGI_FORMAT_으로 시작하는 자료 형식 사용자원과 서술자
서술자
안티앨리어싱
멀티샘플링
DXGI_SAMPLE_DESC라는 구조체를 채워야 한다.DXGI_SAMPLE_DESC는 COUNT, Quality라는 두 개의 멤버로 이루어져 있다.ID3D12Device::CheckFeatureSupport : 주어진 텍스처 형식과 표본 개수 조합에 대한 품질 수준들의 개수 알 수 있다. (이거 말고도 여러 정보 알아낼 수 있음)기능 수준 : GPU가 지원하는 기능들의 집합을 정의함. 다렉 버전마다 대응됨.
DXGI(DirectX Graphics Infrastructure)
IDXGIFactory : IDXGISwapChain 인터페이스 생성과 디스플레이 어댑터 열거에 사용됨.IDXGIAdapter : 디스플레이 어댑터 관련 인터페이스상주성 (residency)
ID3D12Device::MakeResident(), ID3D12Device::Evict()를 이용해서 상주성을 직접 제어할 수도 있다.