본문 바로가기

programing150

[Modern C++] 유니폼 초기화(vector) - 벡터를 초기화 할 때 배열처럼 가능- 벡터에 클래스가 들어가면 이중 배열 처럼 가능 1) std::vector vec{1,2,3,4,5}; 2) class Player{private:string sName;int iHp;pubilc:Player(string _sName, int _iHp) : sName(_sName), iHp(_iHp) {} }; auto main()->int{vector vec{{"asdf", 100}, {"qwer", 50}, {"zxcv", 123}}; return 0;} 2016. 8. 16.
[Modern C++] range-based for (범위 기반 for문) - 루프 순회 값 i의 초기 값을 정해줄 필요 없음- 배열의 길이을 지정 안해줘도 됨- 순회 조건을 지정할 필요 없음- VS2013부터 지원 해줌 cf. 의 for_each()는 break; 가 안됨 => 모두 돌아야 함, return; 시 무시함하지만 range-based for의 경우 for와 같이 도중에 루프문을 나오는 것이 가능함. ex)int arr[5] = {0, 1, 2, 3, 4};for(int i : arr){std::cout 2016. 8. 16.
[Modern C++] 람다 함수 & decltype - 함수 포인터를 호출하면 함수로 점핑(Jumping)이 일어남 - 점핑하면서 오버헤드가 생기는데 이 오버헤드를 막기위해 인라인 함수가 존재 - 인라인화 하게 되면 매크로화 되어서 컴파일시에 함수가 호출되는 부분에 완전한 함수체를 삽입함 - C++에서는 함수 객체로 인라인 함수 사용 가능 () - C++11에서는 함수 객체보다 더 간결한 람다로 인라인 함수 사용 가능 - 람다 : 익명함수 (Anonymous Function)└ 형태 : [ 캡쳐 ] ( 인수 ) -> 반환타입 { 식 }└ 캡쳐 : 외부 인자, = : 복사 , & : 참조, 특정 변수만 설정도 가능└ 인수 : 디폴트 설정 불가, 가변 크기 불가└ 반환 타입 : 보통은 식에서 return값을 추측하지만 추측과 다를경우 오류가 생기므로 설정└ .. 2016. 8. 16.
Stack & Heap의 접근과 메모리 할당 - 일반적으로 메모리 풀을 Heap에 할당하여 사용함 - 단편화를 막기 위한 방편으로 사용할 때 Stack 메모리에 영역을 잡고 사용한다면 Heap보다 빠른 이점이 있을 것 - 스택은 용량이 1M(VC default, 늘릴 수 있음)로 제한되어서 Heap을 더 사용함 - 스택에 동적 할당하는 방법 : void* alloca(size_t _Size), void* malloca(size_t _Size)└ 메모리 해제를 해주지 않아도 됨 (프로그램 종료시 stack이 파괴될 때 같이 자동 해제됨)└ free()로 해제 불가능└ 단, 오류나 BOF(Buffer Overflow)가 발생하기 쉬움└ 1M 제한은 여전히 존재 - 스택이 힙보다 빠른 이유 : 지역 참조성 (Cache 히트율이 높음) (위치와는 관계가 .. 2016. 8. 16.