본문 바로가기

programing/C++56

[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.
erase()와 remove() 차이 - erase()는 vector에도 있고 list에도 있음- remove()는 list에만 있음 - vector::erase() : capacity는 그대로지만 size는 줄어듦 (뒤에 있던 데이터는 앞으로 당겨짐)- list::erase() : 요소가 없어지면서 할당 메모리도 해제됨- list::remove() : 요소가 없어지면서 할당 메모리도 해제됨 - vector가 remove()를 사용하려면 Algorithm에 있는 stl의 remove()를 사용해야함list와 vector 모두 Algorithm의 remove를 사용하면 값은 사라지지만(객체 자체는 맨 뒤로 이동) 뒤의 데이터가 앞으로 당겨지기만 하고 그 이후 처리는 아무것도 안함, 요소의 갯수는 그대로=> vector는 size가 그대로이고 .. 2016. 8. 4.