std::splice splice는 한 list에서 다른 list로 원소들을 옮기는 함수. 원소들은 복사(copy)나 이동(move)되지 않고 포인터 주소만 옮겨 담는다. 파라미터 pos 삽입될 원소 위치 other 콘텐츠를 전송할 다른 컨테이너 it other에서 *this로 전송할 원소 first, last other에서 *this로 전송할 원소의 범위 #include #include std::ostream& operator 프로그래밍/Morden C++ 2021.07.13
std::advance advance 함수는 주어진 iterator를 n개 이동해 모든 컨테이너를 배열처럼 접근할 수 있게 해준다. return value는 없고 iterator 자체가 수정됨 #include #include #include int main() { std::vector v{ 3, 1, 4 }; auto vi = v.begin(); std::advance(vi, 2); std::cout std::advance - cppreference.com template void advance( InputIt& it, Distance n ); (until C++17) template constexpr void.. 프로그래밍/Morden C++ 2021.07.13
자주 쓰이는 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.. 프로그래밍/Morden C++ 2021.07.11
[C++] 동적 배열을 이용한 stack #pragma once #include #include template class cst_stack { public: cst_stack() {} virtual ~cst_stack() {} virtual void push(T& val) = 0; virtual void push(T&& val) = 0; virtual T& pop() = 0; virtual T& top() = 0; virtual bool IsEmpty() = 0; virtual bool IsFull() = 0; }; template class cst_arr_stack : public cst_stack { public: cst_arr_stack() noexcept :arr(new T[size]), top_(0), max_(size) { } ~c.. 프로그래밍/C,C++ 2021.06.30
[C++] Object pool template class CObjectPool { using uchar = unsigned char; public: CObjectPool() { alloc(); } ~CObjectPool() { } void alloc() { free_list_ = new uchar[sizeof(T) * ALLOC_COUNT]; uchar* pNext = free_list_; uchar** ppCurr = reinterpret_cast(free_list_); for (int i = 0; i sizeof(void*)); pNext += sizeof(T); // 이전에 가리키던 블럭은 다음 블.. 프로그래밍/C,C++ 2021.06.29
RTTI란? RunTime Type Infomation 런타임에 타입 정보를 알 수 있다는 의미다. 즉, 실행 중에 클래스 포인터의 실제 타입을 확인할 수 있다. C++는 C++98부터 RTTI를 지원해왔다. typeid 연산자를 이용해 vftbl에 있는 정보로 타입을 확인한다. vftbl의 정보를 확인하므로 두 클래스가 상속 관계라도 virtual 함수가 포함되어야 한다. dynamic_cast dynamic_cast는 RTTI를 이용해 현재 객체의 정보를 검사할 수 있다. dynamic_cast를 통해 형 변환을 수행하고, Parent의 포인터가 실제로 가리키는 객체의 타입과 동일하다면 유효한 포인터를 반환하고, 아니라면 nullptr을 반환한다. 다만 속도가 느리기 때문에 잘 사용하지 않는다. 커스텀 cast .. 프로그래밍/C,C++ 2021.06.18
비동기 함수 정리 ::AcceptEx docs.microsoft.com/en-us/windows/win32/api/mswsock/nf-mswsock-acceptex AcceptEx function (mswsock.h) - Win32 apps Accepts a new connection, returns the local and remote address, and receives the first block of data sent by the client application. Note This function is a Microsoft-specific extension to the Windows Sockets specification. . docs.microsoft.com 함수원형 BOOL AcceptEx( SOCKET s.. 프로그래밍/C,C++ 2021.03.22
가상 메모리 및 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,C++ 2020.02.19
C++ 연산자 오버로딩 https://msdn.microsoft.com/ko-kr/library/5tk49fh2.aspx 연산자가 특정 클래스에 적용될 때, 그 동작 방식을 목적에 맞게 정의할 수 있는 기능.모든 연산자가 오버로딩이 가능하지 않고, 새로운 연산자를 추가할 수 없다. 반드시 메서드로 오버로딩 해야 하는 연산자어떤 연산자들은 클래스를 떠나서는 의미가 없으므로 반드시 클래스의 메서드로만 오버로딩 되어야 한다.ex) operator=는 특정 클래스의 대입에 대해서만 의미가 있다. 반드시 전역 함수로 오버로딩해야 하는 연산자연산자의 좌항에 목적하는 클래스 외에 다른 타입이 올 수 있어야만 한다면 전역 함수로서 오버로딩 해야 한다.ex) operator 어느 것이나 상관없는 연산자는 virtual로 선언이 가능하도록 메서.. 프로그래밍/C,C++ 2018.04.25
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.. 프로그래밍/C,C++ 2018.04.18