1 ) std::string::erase가 비멤버 함수가 될 수 있을까? 2 ) std::string의 나머지 멤버 함수들을 분석하고, 비멤버 함수들로 만들 수 잇는지(또는 그렇게 하는 것이 좋은지) 설명하라 a. replace b. copy와 substr c. compare d. find 군(find, find_*, rfind ) 이렇게 질문이 있는데, 하나의 진리에서 나온 것들이다. "클래스 구현시, non-member, non-friend function 으로 만들 수 없는 함수만, member 함수로 만들어라." 이번 항목의 요약을 책에서 그대로 옮긴다. 분활과 캡슐화는 좋은것이다. 특히 C++의 경우에는, 알고리즘과 컨테이너를 분리시키는 것이 좋다. STL도 대부분 그런 원칙에 따라 만들어 졌다..
string 검색 결과
내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 이제부터 알고리즘(Algorithm)에 대해서 효율적인 사용 방법에 대해서 이야기 한다. STL 에 있어 알고리즘은 .. Containers 만큼이나 중요하다. 기본 제공되는것만도 100가지가 남지만, 이중 제일 많이 쓰이는 부분과 좋은 알고리즘(Algorithm)이지만 소개받지 못했던 부분에 대해서 이야기 한다고 하니, 눈 딱 크게 뜨고, 봐야 할 것같다. 이번 항목의 주제는 "알고리즘을 이용하여 데이터를 넣을 때, 컨테이너의 공간을 크게 잡고 넣는게 ..
이번 항목은 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에 아무 인자도 없다고 하더라..
C++의 창시자 및 설계자인 Bjarne Stroustrup(발음하기도 힘들다)도 string에 대한 구현은 갖가지가 될 수 있다고 말할 정도로, string은 다른 STL보다 정말 구현방법에 많은 차이가 보인다. 이렇기 때문에 string에 대한 상세한 사항을 알 필요는 없지만, 왜 알 필요가 없는지 알 필요는 있다고 필자는 이야기한다. string의 문자열 값은 참조 카운팅이 될 수도 있고, 아닐 수도 있다. 기본적으로 많은 라이브러리에선 하고 있다, 또한 이 기능을 막는 방법이 매크로 단계에서 제공하고 있다.string 객체의 크기는 포인터 크기의 1~7배까지 다양하다.string에 문자열을 할당할 때 0~2번 메모리 할당 할 수 있다.둘 이상의 string 객체가 문자열의 크기나 용량 정보를 가지..
이 이야기에 앞서 vector 와 string 에 대해서 이야기를 하자면, vector 와 string 은 실제로 배열처럼 사용 할수가 있다. 이런 배열 처럼 사용 할수 있는 점 때문에. vector와 string으로 만든 메모리는 실제로 배열처럼 차례대로 메모리에 올라간다. 여기서 잠깐, 그렇다면 어떻게 동적으로들어 가는 메모리가 배열처럼 차례대로 메모리에 올라가느냐? 배열 처럼 차례대로 메모리에 올리기 위해서 vector 와 string 은 미리 메모리 공간을 기본값만큼 할당 받아 놓고, 메모리가 새롭게 추가 되면, 이 공간에 넣어 둠으로써 배열처럼 작동시키는 것이다. 이 할당 받아 놓은것을 최대 용량으로 표현하겠다. 그렇다면 어떻게 vector 와 string에 들어가는 원소의 갯수에 제한이 없느냐..
최근댓글