2. vector and string

std::vector와 std::string에 대해 알아보자.

13. Prefer vector and string to dynamically allocated arrays.

배열을 동적 할당해 쓰지 말고 RAII가 되는 std::vector와 std::string을 쓰자.

14. Use reserve to avoid unnecessary allocations.

std::vector에 추가할 원소의 수를 미리 알고 있을 경우에는 그만큼의 공간을 reserve 해서 재할당을 막자.

15. Be aware of variations in string implementations.

std::string의 구현은 여러 가지가 있으며 그에 따라 세부적인 특성이 다르다. std::string의 값은 참조 횟수가 세어질 수도 아닐 수도 있다. 오브젝트 크기는 char* 포인터 개수의 1~7배일 수도 있다. 새 std::string 값을 만드는 것은 동적 할당을 0~2회 할 수 있다. std::string 오브젝트는 문자열의 크기와 용량 정보를 공유할 수도 아닐 수도 있다. std::string은 오브젝트별 할당자를 제공할 수도 아닐 수도 있다. 구현이 다르면 최소 문자열 버퍼 할당수도 다르다.

16. Know how to pass vector and string data to legacy APIs.

std::vector와 std::string의 데이터를 아주 오래된 포인터 API에 넘겨주려면 &v[0], s.c_str() 등의 방식을 쓴다.

17. Use “The swap trick” to trim excess capacity.

std::vector와 std::string의 용량은 쓰고 나서 줄어들지 않는다. 안 쓰면 빈 컨테이너와 swap해서 용량을 줄이자.

18. Avoid using vector<bool>.

std::vector<bool>은 비트를 패킹하기 위해 특수화되어 있는데 이는 C++ 표준의 실수다. 가급적 쓰지 마라.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중