항목 19부터는 STL 연관 컨테이너(Associative Containers)에 대한 이야기이다. 어떻게 이해하는게 좋을까 고민하다가 한가지 묘안이 떠올랐다. 예로써 감을 잡는 방법을 쓴다. 연관컨테이너에서의 1. 상등(equality)은 "값이 같은가?" 이고, 동등(equivalence)는 "위치가 같은가?" 로 풀이가 된다. 2. 상등은(equality) operator== 으로 판별하고 동등(equivalence)은 operator 3. 말로 하자면, 상등한 값이냐?, 동등한 위치냐? 4. 상등(equality)은 "같다, 틀리다" 로 표현되고, 동등(equivalence)은 "크냐? 작냐?" 로 표현된다. 이 정도로 이야기를 하면 어느정도 이해가 될 것이다. 이게 왜 중요..
2008/07 검색 결과
vector에, bool을 넣어 사용하지 말라는 뜻으로 이해 하고 넘어가도 되는 장이지만, 왜 그런지 알아둘 필요가 있기에 간략한 설명을 한다. 설명에 들어가기 앞서, 코드를 포함하여, 설명을 한다. #include #include int main(void) { std::vector Dst;// Dst 생성 Dst.push_back(1);// 참값 넣음 Dst.push_back(1);// 참값 넣음 Dst.push_back(0);// 참값 넣음 bool pb = Dst[0];// .. 이건 되지만 bool *pbb = &Dst[0];// .. 이건 되지 않는다, 컴파일 해 보면 알수 있다. } 여기서 보았을때 bool 은 정상적으로 작동이 되지 않을것이며, 맨 끝에 라인에서 컴파일 타임 에러가 날 것이다..
이번 항목은 swap 에 대한 기본 지식이 필요로 한다. swap 에 관련된 Effective C++ 25항목 참조 하면 좋을듯 싶고, 형변환은 그 객체의 사본을 만든다는 것도 알아두면 이번장도 어려운것은 없다. #include int main(void) { std::vector Dst; // Dst 생성 Dst.capacity(); // 기본적인 용량 확인 Dst.push_back(3); // 넣고 Dst.capacity(); // 확인 Dst.push_back(3); Dst.capacity(); // 확인 Dst.push_back(3); Dst.capacity(); // 확인 Dst.push_back(3); Dst.capacity(); // 확인 Dst.push_back(3); Dst.capacity..
C API 들 중에 배열을 받아서 처리 하는 함수들이 많이 있다. 이 함수들에 vector와 string이 들어 갈수가 있는데, 왜 이 두 STL 만 들어가냐하면, ... 이 두 STL은 배열을 기반으로 만들어진 STL이기에, 실제로 메모리가 연속되어서 할당된 것이다. 예를 들어 std::vector v; 가 있고, 10개의 요소가 있다면, &v[0]이 그 첫번째 주소이고 size(); 함수 호출에 리턴되는 값만큼 연속적으로 쌓여 있다는 이야기이다. 여기서 주의 해야 할 것은 &v[0], size()를 넘겨서 대개는 잘 작동 하는데, 그 이유는 이 배열을 루틴 내에서 크기변경을 하지 않기 때문이다. 반대로 잘 작동 안하는것은 v의 크기가 루틴내에서 변경되기 때문이다. 또한 v에 아무 인자도 없다고 하더라..
이렇게 모모 하지 말자, 모모 하자. 이런식으로 나온 제목을 보고 있노라면, 마음이 편해진다. 생각할 필요 없이 그대로 믿고 따르면 되기 때문이다.(.. 물론 알아야 할 필요가 없다는것은 아니지만. ㅋ) 왜냐하면 함수의 디폴트 매개변수는 정적 바인딩되고, 상속되는 함수는 동적으로 바인딩 되기 때문이다. .. 이렇게만 정리하면 편하겠지만, 정적 바인딩, 동적 바인딩에 대해서 알아야 더 편한 세상에 살수 있어, 정리해 둔다. 정적 바인딩이란, 확실한 것들을 미리 묶는다라는 개념으로. 미리 묶었기 때문에 예측하여 캐싱할수가 있어, 더 빠르다. 공식적으론 선행 바인딩(Early Binding)이라 부른다.(이 말이 개인적으로 더 좋다고 보는데..) 동적 바인딩이란, 유동적이기에 미리 묶을수 없지만, 동적으로 다..
C++의 창시자 및 설계자인 Bjarne Stroustrup(발음하기도 힘들다)도 string에 대한 구현은 갖가지가 될 수 있다고 말할 정도로, string은 다른 STL보다 정말 구현방법에 많은 차이가 보인다. 이렇기 때문에 string에 대한 상세한 사항을 알 필요는 없지만, 왜 알 필요가 없는지 알 필요는 있다고 필자는 이야기한다. string의 문자열 값은 참조 카운팅이 될 수도 있고, 아닐 수도 있다. 기본적으로 많은 라이브러리에선 하고 있다, 또한 이 기능을 막는 방법이 매크로 단계에서 제공하고 있다.string 객체의 크기는 포인터 크기의 1~7배까지 다양하다.string에 문자열을 할당할 때 0~2번 메모리 할당 할 수 있다.둘 이상의 string 객체가 문자열의 크기나 용량 정보를 가지..
최근댓글