* 가장 많이 쓰는 vector, string에 관련된 팁 모음이다. 큰1장 후반부에는 모르는 내용(할당기 같은..)이 좀 많아서 일단 건너 뛰었다. [[TableOfContents]] = Item13. Prefer vector and string to dynamically allocated arrays. = == new/delete 콤비의 문제점 == * new 해줬으면 delete 해줘야 한다는 번거로움. * delete [] 와 delete 를 잘 써야 함. 잘못 쓰면 무슨 일이 벌어질지 모름. * 한번 delete한 메모리를 또 delete하면 "잘못된 연산... " 요 에러가 뜰지도 모름. == vector/string 을 쓰면 좋은 이유 == * 자신이 알아서 메모리 관리 한다.(캬) * 자신이 알아서 늘어난다.(역시 캬) * 배열은 제공하지 않는 연산을 제공한다. * char*은 짜증난다. == 나중에 찾아볼것들 == * reference count라는 게 있는데.. 뭐하는 걸까.. 참조 변수 세는건가?--a AfterCheck * 멀티 쓰레드 환경에서는 다른 쓰레드가 할당해주고 복사해주므로 시간이 절약된다는데.. 굳이 이것까지 쓸것인가..--; ---- = Item14. Use reserve to avoid unnecessary reallocations. = == vector/string의 메모리가 필요할때 더 커가는 과정 == * 새로운 메모리를 할당한다.(일반적으로 두배 커진다.) * 원본 컨테이너의 값들을 새롭게 할당한 메모리로 옮긴다. * 원본 컨테이너안에 있던 객체들을 삭제한다. * 원본 컨테이너의 메모리를 해제한다. == 헷갈릴수 있는 컨테이너 크기에 관한 메소드들 == * size() - 현재 컨테이너에 들어 있는 객체의 수.(최대량 아님) * capacity() - 현재 할당되어 있는 메모리에 최대 수용할수 있는 객체 수 * resize(n) - n개 넣을수 있게 메모리 재할당 * n이 현재 size()보다 작으면 - 끝에서부터 size() - n 만큼 지운다. * n이 현재 size()보다 크면 - 끝에서부터 n - size() 만큼의 빈 공간을 추가한다. * n이 현재 capacity()보다 크면 - 메모리 재할당한다. * reserve() - 그 컨테이너의 capacity를 최소 n이 되게 할당. * vector에서 만약 현재 capacity보다 n이 작다면? - 쌩깐다. * string에서는 ? 줄일지도 모른다.(--;) == 크기를 유지하고 싶다면 reserve 메소드를 사용하자. == * reserve를 사용하면 재할당, 반복자, 포인터, 참조 등등의 갱신을 최소화 시킬수 있다. * reserve로 왕창 크게 잡아 놓고 나중에 trim() 써주자. 빈공간 제거된다. ---- = Item15. Be aware of variations in string implementations. = ---- = Item16. Know how to pass vector and string data to legacy APIS = ---- = Item17. Use 'the swap trick' to trim excess capacity. = ---- = Item18. Avoid using vector. = ---- ["EffectiveSTL"]