STL

C and C++

[C++][STL] vector의 메모리(capacity) 완벽하게 제거하기 feat. swap

vector를 사용한 뒤 메모리를 해제해주기위해 보통 clear함수를 많이 호출한다. 그러나 clear함수는 vector에 저장된 값들은 제거되지만 vector에 할당 된 메모리는 삭제되지 않는다. 아래의 예를 보면 clear 함수 호출 후에도 capacity값이 남아 있음을 볼 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include using namespace std; int main(void) { vector vt; vt.push_back(10); vt.push_back(10); vt.push_back(10); vt.push_back(10); vt.push_back(10); vt.push_back(10); vt.clear(..

C and C++

[C++][STL] vector for문 올바로 사용하기

대부분의 경우 vector를 for문에 사용할 때 iterator를 사용하거나 초기화식을 int를 사용한다. iterator로 사용할 경우 문제없지만 초기화식 타입에 int를 사용할 경우 오버플로우를 발생할 수 있다. 왜냐하면 vector의 size는 정확히 말하면 signed int가 아니라 unsigned int 타입이기 때문이다. 따라서 이러한 버그가 발생하면 찾기도 힘드니 정확한 방법으로 vector를 사용하도록 한다. 예제 1234567891011121314151617181920#include #include using namespace std; int main(void) { vector vt; vt.push_back(10); vt.push_back(10); vt.push_back(10); vt..

C and C++

[C++][STL] size()함수 주의사항

STL size()함수 주의사항 STL에서 제공하는 size()함수의 리턴타입을 찾아보면 아래와 같이 부호가 없는 정수형으로 나와있다. std::size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int 따라서 size()함수를 통해 아래와 같은 코드를 작성하면 문제가 된다. for (int i=0; i < vt.size() - 1 ; i++) doSomething(); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include #include using namespace std; ..

개발새발
'STL' 태그의 글 목록