1. Item13. Prefer vector and string to dynamically allocated arrays.

1.1. new/delete 콤비의 문제점

  • new 해줬으면 delete 해줘야 한다는 번거로움.
  • delete [] 와 delete 를 잘 써야 함. 잘못 쓰면 무슨 일이 벌어질지 모름.
  • 한번 delete한 메모리를 또 delete하면 "잘못된 연산... " 요 에러가 뜰지도 모름.

1.2. vector/string 을 쓰면 좋은 이유

  • 자신이 알아서 메모리 관리 한다.(캬)
  • 자신이 알아서 늘어난다.(역시 캬)
  • 배열은 제공하지 않는 연산을 제공한다.
  • char*은 짜증난다.

1.3. 나중에 찾아볼것들

  • reference count라는 게 있는데.. 뭐하는 걸까.. 참조 변수 세는건가?--a AfterCheck
  • 멀티 쓰레드 환경에서는 다른 쓰레드가 할당해주고 복사해주므로 시간이 절약된다는데.. 굳이 이것까지 쓸것인가..--;



2. Item14. Use reserve to avoid unnecessary reallocations.

2.1. vector/string의 메모리가 필요할때 더 커가는 과정

  • 새로운 메모리를 할당한다.(일반적으로 두배 커진다.)
  • 원본 컨테이너의 값들을 새롭게 할당한 메모리로 옮긴다.
  • 원본 컨테이너안에 있던 객체들을 삭제한다.
  • 원본 컨테이너의 메모리를 해제한다.

2.2. 헷갈릴수 있는 컨테이너 크기에 관한 메소드들

  • size() - 현재 컨테이너에 들어 있는 객체의 수.(최대량 아님)
  • capacity() - 현재 할당되어 있는 메모리에 최대 수용할수 있는 객체 수
  • resize(n) - n개 넣을수 있게 메모리 재할당
    • n이 현재 size()보다 작으면 - 끝에서부터 size() - n 만큼 지운다.
    • n이 현재 size()보다 크면 - 끝에서부터 n - size() 만큼의 빈 공간을 추가한다.
    • n이 현재 capacity()보다 크면 - 메모리 재할당한다.
  • reserve() - 그 컨테이너의 capacity를 최소 n이 되게 할당.
    • vector에서 만약 현재 capacity보다 n이 작다면? - 쌩깐다.
    • string에서는 ? 줄일지도 모른다.(--;)

2.3. 크기를 유지하고 싶다면 reserve 메소드를 사용하자.

  • reserve를 사용하면 재할당, 반복자, 포인터, 참조 등등의 갱신을 최소화 시킬수 있다.
  • reserve로 왕창 크게 잡아 놓고 나중에 trim() 써주자. 빈공간 제거된다.



3. Item15. Be aware of variations in string implementations.




4. Item16. Know how to pass vector and string data to legacy APIS




5. Item17. Use 'the swap trick' to trim excess capacity.




6. Item18. Avoid using vector<bool>.

Retrieved from http://wiki.zeropage.org/wiki.php/EffectiveSTL/VectorAndString
last modified 2021-02-07 05:23:10