320x100

프로그래밍 89

자주 쓰이는 vector 사용 패턴

#include 벡터 생성 및 초기화 // 1차원 // 디폴트 생성자 vector vec; // 원소 10개를 zero 초기화(0, 0.0, nullptr..) vector vec(10); // 원소 10개를 3으로 초기화 vector vec(10, 3); // 이니셜라이저 리스트 생성 vector vec({1, 2, 3}); // 유니폼 초기화 vector vec = {1, 2, 3}; vector vec{1, 2, 3}; // 힙에 생성 auto vec = std::make_unique(10); // int타입 벡터 배열(크기 : 10) 생성 vector vec[10]; // int형 백터 배열 생성(행은 가변이지만 열은 고정) vector vec[] = {{1, 2}, {3, 4}}; // 벡터 v..

RTTI란?

RunTime Type Infomation 런타임에 타입 정보를 알 수 있다는 의미다. 즉, 실행 중에 클래스 포인터의 실제 타입을 확인할 수 있다. C++는 C++98부터 RTTI를 지원해왔다. typeid 연산자를 이용해 vftbl에 있는 정보로 타입을 확인한다. vftbl의 정보를 확인하므로 두 클래스가 상속 관계라도 virtual 함수가 포함되어야 한다. dynamic_cast dynamic_cast는 RTTI를 이용해 현재 객체의 정보를 검사할 수 있다. dynamic_cast를 통해 형 변환을 수행하고, Parent의 포인터가 실제로 가리키는 객체의 타입과 동일하다면 유효한 포인터를 반환하고, 아니라면 nullptr을 반환한다. 다만 속도가 느리기 때문에 잘 사용하지 않는다. 커스텀 cast ..

가상 메모리 및 Large Address Aware

OS bit별 사용 가능한 최대 메모리 양 32bit OS 64bit OS 32bit Program 2GB 2GB 32bit Program(LAA) 2GB 4GB 64bit Program X 물리메모리의 양 실행중인 프로그램의 총 메모리 3.5GB 물리메모리의 양 32bit에서 사용할 수 있는 메모리가 2GB인 이유: Null 포인터 할당 파티션 : 0x00000000 ~ 0x0000FFFF 유저 모드 파티션 : 0x00010000 ~ 0x7FFEFFFF => 2047MB 64KB 접근 금지 파티션 : 0x7FFF0000 ~ 0x7FFFFFF 커널 모드 파티션 : 0x80000000 ~ 0xFFFFFFFF Large Address Aware란? 32bit 응용 프로그램에서 2GB보다 더 큰 메모리가 필요..

C++ 연산자 오버로딩

https://msdn.microsoft.com/ko-kr/library/5tk49fh2.aspx 연산자가 특정 클래스에 적용될 때, 그 동작 방식을 목적에 맞게 정의할 수 있는 기능.모든 연산자가 오버로딩이 가능하지 않고, 새로운 연산자를 추가할 수 없다. 반드시 메서드로 오버로딩 해야 하는 연산자어떤 연산자들은 클래스를 떠나서는 의미가 없으므로 반드시 클래스의 메서드로만 오버로딩 되어야 한다.ex) operator=는 특정 클래스의 대입에 대해서만 의미가 있다. 반드시 전역 함수로 오버로딩해야 하는 연산자연산자의 좌항에 목적하는 클래스 외에 다른 타입이 올 수 있어야만 한다면 전역 함수로서 오버로딩 해야 한다.ex) operator 어느 것이나 상관없는 연산자는 virtual로 선언이 가능하도록 메서..

STL 커스터마이징

1. 할당자STL컨테이너는 할당자 타입을 템플릿 파라미터로 받는다.ex) vector 템플릿 정의template class vector; 2. 반복자 어댑터2.1 역뱡항 어댑터reverse_iterator를 이용하면 역방향 탐색을 할 수 있다.typedef reverse_iterator와 rbegin(), rend() 메서드를 지원한다. 2.2 스트림 반복자입출력 스트림을 입출력 반복자로 취급할 수 있는 스트림 어댑터를 제공한다.ostream_iterator(출력 스트림 반복자), istream_iterator(입력 스트림 반복자)ex)std::vector myVector;for (int i = 0; i < 10; i++) {myVector.push_back(i);} std::copy(myVector.b..

320x100