목록공부/C++ (4)
숨창고
1. ios::sync_with_stdio(false); C 표준 stream과 C++ 표준 stream의 동기화를 끊습니다. 기본적으로, 모든 표준 stream들은 동기화 되어있습니다. 그래서 우리는 C와 C++의 입출력방식을 자유롭게 혼용할 수 있습니다. 동기화를 끊는다면, C++ stream들은 독립적인 버퍼를 갖게되며, C와 C++의 입출력방식을 혼용해서 쓰는 것이 굉장히 위험해집니다. 또한 동기화된 C++ stream은 thread-safe합니다. (다른 thread의 output이 동시에 액세스해도 충돌하지 않습니다.) 동기화를 끊으면 사용하는 버퍼의 수가 줄어들기 때문에 실행속도 자체는 향상됩니다. 2. cin.tie(NULL); cin을 cout으로부터 untie합니다. stream을 ti..
C-string은 C언어에서 사용해오던 전통적인 문자열로서, '\0'으로 끝나는 문자배열을 문자열로 취급하는 방식이다. C++의 string class는 내부적으로 문자열을 저장하기 위해서 char array를 사용하지만 모든 memory 관리, 할당, null종결은 모두 string class가 자체적으로 수행하며 이것이 string class가 사용하기 쉬운 이유이다. vector와 비슷하게 memory를 동적으로 할당하기 때문에 string 객체의 length를 자유롭게 변경할 수 있다. 또 string class는 container class이기 때문에, 다른 container들(vector, set, maps)에서처럼 iterator를 통해 모든 char 원소들에 접근할 수 있고, 간단하게 []..
vector가 뭔가요?vector는 대표적인 시퀀스 컨테이너로, 크기를 바꿀 수 있으며 배열과 비슷합니다. vector는 배열처럼 원소들을 메모리의 연속된 공간에 저장합니다. 그래서 우리는 배열에서처럼 []나 pointer에 적절한 offset을 더해주는 방식으로 vector의 원소에 접근할 수 있습니다. 그러나 배열과는 다르게 vector는 size를 동적으로 바꿀 수 있고, 컨테이너가 메모리를 자동으로 관리합니다. vector의 메모리 관리 방식은?내부적으로, vector는 동적으로 할당된 배열을 사용합니다. 원래 배열에 새로운 원소를 추가하기 위해선 새로운 배열을 할당한 후 모든 원소들을 복사해야하는데, 이것은 꽤나 무거운 작업입니다. 그래서 vector는 확장가능성을 대비해 여유 메모리 공간을 할..
가 뭔가요? cstdio는 C STandarD Input and Output의 약자로, C언어의 stdio.h와 같습니다. 입/출력과 관련된 옛날 C함수들을 포함한 헤더파일입니다. (printf(), fprintf(), fopen, etc) C++의 와 뭐가 다른가요? 기능상의 차이는 없으나 stdio.h는 global namespace를 사용하고 cstdio는 std라는 namespace를 사용합니다. 과의 차이점은 뭔가요? iostream은 입/출력을 수행하기 위한 모든 C++ 스트림들을 포함한 헤더파일입니다. 이 둘은 하는 일은 같지만, 둘 다 사용할 수 있다면 iostream을 사용하는 것이 더 안전합니다. type-safe : iostream은 compiler가 I/O되는 객체의 형식을 stat..