이런 경우는 같은 타입의 벡터 두개 중 특정 범위의 데이터를 서로 옮기려 할때 많이 발생 한다. 이 때문에데이터를 컨테이너안에 적재하려고 할때 선택의 기로에 우리는 빠지게 된다. 1. 루프를 돌릴까? 2..알고리즘에 위임할까? ... 당연하겠지만 루프보다야 알고리즘에 위임하는게 더 좋다. 말부터가 일단 ... 무엇인가 더 좋다고 느껴진다. 책의 모든 내용을 다 적어 정리 하는것 보다 "그렇구나~ 그래서 이렇게 사용 해야 돼" 라고 정리하고, 나중에 궁금할때 vector 를 분석하면 더 도움이 되기 때문에, 3가지로 요약한다,. 첫째, 아트 코딩을 할 수 있게 해준다. - 가독성, 보수성이 좋고, 디버깅이 용이하게 된다. 둘째, 벌레가 들 꼬인다. - 버그 발생률이 더 적어진다. 셋째, 세금을 면제 받을 ..
분류 전체보기 검색 결과
이 이야기들은 전부 표준 STL 컨테이너에 관한 이야기이다. 만약 vectoer vcInt 라면, vcInt.size() 또는 vcInt.empty() 를 말한다. size() 함수는 컨테이너에 적재되어진 원소의 갯수를 반환해 주는 함수이고 empty() 함수는 컨테이너에 적재되언 원소가 하나도 없다면 TRUE 를 반환해 주는 함수이다. 이렇게 말하니 좀 어렵다 size() 함수는 몇개 있냐? 물어 볼때 쓰고 empty() 함수는 비워있냐? 물어 볼때 쓴다. size()는 전부 count 해야 하는 비용을 물어야 하며, empty()는 처음과 끝이 같은지만 비교하는 비용만 물면 된다. 여담으로.. vector 컨테이너는 스스로 카운팅을 하기 때문에 size() 나 empty() 나 똑같은 비용을 지불한다..
STL 컨테이너들은 객체를 복사하여, 데이터를 쌓아둔다. 만약 기본자료형이 아닌 클래스 객체형이라면, 반드시 복사 생성자와 operator = 을 꼭 만들어 두어야만 켄터에너에 순풍 순풍 넣을수 있다. (암시적 생성자와 operator= 도 있다.) 이런 컨테이너에 한가지 문제점이 지적되었다. 사용자 왈 : "만약 30Byte 짜리 데이터 10만개를 넣는다면, 너무 많은 비용을 지불하는게 아니냐?" 이 때문에 크게 두가지 해결 방법이 나오게 된다. 첫째, 포인터를 넣어 복사 비용을 줄이자. 사용자는 신나게 컨테이너에 포인터를 넣기 시작하지만, 컨테이너 왈 : "리소스 해체 의무는 너가 저야 한다~" .. 결국 사용자는 울며 겨자먹기로 컨테이너에 포인터를 넣고, 힘들게 리소스 해체도 하게 된다. 이렇게 되..
이 이야기는 컨테이너에만 맞는 말이 아니라고 생각한다. 물론 STL 책이니 켄테이너에만 이야기 해야 한다고도 생각한다. ^^ 컨테이너에 독립적인 코드라 하면, 어떤 .. 컨테이너에도 적용 시킬수 있는 코드를 말한다. 그렇다면 독립적인 코드가 왜 환상인가? ... STL 컨테이너를 써본 사람은 알겠지만 각각 컨테이너마다 사용하는 iterator, 데이터 넣기, 빼기, 정렬하기, 검색하기 등.. 각 켄테이너에 맞는 코드가 따로 있기 때문이다. 그렇다면 어떻게 코딩해야 하는가? 컨테이너를 class 에 넣어 둔다. typedef 를 이용하여 컨테이너명을 재정의한다. 컨테이너에 접근 하려면 class 에 접근 하게 만든다. 이제 컨테이너를 바꾸게 바꾸어야만 할 때, 디버깅을 해야만 할때 이 class 의 컨테이..
new[] 관해서는 typedef가 독이지만, typedef 는 사실 여러 방면으로 쓸모가 많다. 나 같은 경우에는 .. 컨테이너 사용 할때, 컨테이너의 이터레이터를 줄이기 위해서 사용 하곤 한다. 하지만 typedef의 진정한 의미는 바로 따로 있다. 진정한 의미 C++ 에서의 typedef 는 가독성과 코드 수정을 한줄로 만들어 줄께와 같다. 여기서 가독성은 쉽게 이해가 가는데 C++ 에서의 코드 수정은 좀 갸우뚱 할 것이다. C++ 은 OOP 적으로 코딩이 가능한데, OOP의 꽃~ 캡슐화와 typedef 와 맞물리면 코드 수정이 엄청나게 간편해 진다. 예를 들어, 데이터를 관리하기 위해서 컨테이너를 골라야 했다. 대부분의 데이터가 마지막에 들어가고, 마지막에서 지워 진다는것을 알게됬고 나는 VECT..
최근댓글