본문 바로가기
반응형

C/C++31

[C/C++] 표준 템플릿 라이브러리(STL) - (2) C++ STL 연관 컨테이너 - 시퀀스 컨테이너와는 다르게 키(key) - 값(value) 구조를 가진다. => 특정한 키를 넣으면 이에 대응되는 값을 돌려준다. ==> 템플릿 라이브러리 이기 때문에 키와 값 모두 임의의 타입의 객체가 될 수 있다. - 특정 키가 연관 컨테이너에 존재하는지 유무를 처리할 수 있는 것은 셋(set)과 멀티셋(multiset) - 특정 키에 대응되는 값이 무엇인지에 대한 처리는 맵(map)과 멀티맵(multimap) - 맵과 멀티맵을 셋 처럼 사용할 수도 있다. => 맵의 경우 셋 보다 사용하는 메모리가 크기 때문에 키의 존재 유무만 궁금하다면 셋을 사용하는 것이 좋다. 셋(set) - insert 함수 => 셋에 원소를 추가한다. ==> 시퀀스 컨테이너와 달리 '어디에' .. 2023. 1. 25.
[C/C++] 표준 템플릿 라이브러리(STL) - (1) C++ STL - 일반적으로 C++ STL은 다음과 같은 세 개의 라이브러리들을 의미한다. 1. 임의 타입의 객체를 보관할 수 있는 컨테이너(container) 2. 컨테이너에 보관된 원소에 접근할 수 있는 반복자(iterator) 3. 반복자들을 가지고 일련의 작업을 수행하는 알고리즘(algorithm) 벡터(std::vector) - C++ STL에서 컨테이너는 크게 두 가지 종류가 있다. 1. 배열처럼 객체들을 순차적으로 보관하는 시퀀스 컨테이너(sequence container) => vector, list, deque 이렇게 3개 정의되어 있음. 2. 키를 바탕으로 대응되는 값을 찾아주는 연관 컨테이너(associative container) - vector의 경우, 임의의 위치에 있는 원소에 .. 2023. 1. 18.
[C/C++] Reference(참조) Reference 레퍼런스는 메모리 상에 존재하지 않을 수도 있다. - 단순히 특정 범위 내(함수 등) 하나의 변수에 대한 레퍼런스를 만드는 경우 굳이 메모리 상에 존재할 필요가 없다. - 레퍼런스가 쓰이는 자리를 모두 원래 변수로 대체할 수 있기 때문이다 레퍼런스들의 배열, 레퍼런스의 레퍼런스, 레퍼런스의 포인터 등은 언어 차원에서 금지되어 있다. - 레퍼런스의 레퍼런스는 원래 변수의 별명의 별명 이라는 말과 같다. 즉, 불필요하다. - 레퍼런스는 특별한 경우가 아닌 이상 메모리 상에서 공간을 차지하지 않는다. - 배열이나 포인터는 주소값을 반드시 포함하는 개념이기 때문에 레퍼런스가 메모리 상에서 공간을 차지하지 않는다는 것과 모순이다. 따라서 언어 차원에서 금지되어 있는 것이다. - 별개로 배열의 레.. 2022. 10. 11.
[C/C++] Vector.clear() 함수 Clear Vector의 내부를 초기화해주는 함수이다. 즉, 내부에 들어있는 값을 모두 없애주는데 이 때 Vector 내부 원소의 타입이 클래스일 경우 소멸자를 호출해서 삭제해준다. 그렇다고 Clear()함수를 사용하면 정말 모든 내용이 초기화되냐라고 하면 그것은 아니다. 우선 이해를 위해 Vector의 동작방식을 간단하게 설명하자면, Vector의 경우 처음에 일정 크기를 할당해두고 Vector에 일정 크기 이상으로 원소가 계속 추가되면 크기를 재할당 하는 방식으로 동작한다. 이 때, Vector의 size는 현재 Vector에 들어있는 원소의 수, Vector의 capacity는 현재 늘어나있는 Vector의 크기라고 이해하면 된다. 여기서 Clear 함수의 문제가 생기는데, Clear를 이용하면 V.. 2022. 10. 5.
반응형