본문 바로가기

코딩테스트를 위한 자료 구조와 알고리즘 with C++

(3)
1장 리스트, 스택, 큐 - std::vector C스타일의 배열이 향상된 버전인 std::array에는 단점이 존재한다. std::array의 크기는 컴파일 시간에 결정되는 상수여야 한다. 따라서 프로그램 실행 중에는 변경할 수 없다. 크기가 고정되어 있어서 원소를 추가하거나 삭제할 수 없다. std::array의 메모리 할당 방법을 변경할 수 없다. 항상 스택 메모리를 사용한다. 이러한 문제를 해결하기 위해 std::array 사용할 수 있다. 가변 크기 배열 std::array는 C스타일 배열, std::array가 가지고 있는 고정 크기 배열 문제를 해결할 수 있다. std::array는 초기화 과정에서 데이터의 크기를 제공하기 않아도 된다. //크기가 0인 벡터 선언 std::vector vec; //지정한 초기값으로 이루어진 크기가 5인 벡터..
1장 리스트, 스택, 큐 - std::array C 스타일의 배열은 몇가지 단점이 존재한다. 메모리 할당과 해제와 수동으로 처리해야 한다. 메모리를 해제하지 못하면 메모리 릭(memory leak)이 발생하여 해당 메모리 영역을 사용할 수 없다. []연산자에서 배열의 크기보다 큰 원소를 참조하는 것을 검사하지 못한다. 잘못 사용하면 세그멘테이션 결합(segmentation fault) 또는 메모리 손상으로 이어질 수 있다. 배열을 중첩해서 사용할 경우 문법이 복잡해진다. 깊은 복사(deep copy)가 기본으로 동작하지 않아 수동으로 구현해야 한다. 깊은 복사: 객체를 복사 할 때, 해당 객체와 인스턴스 변수까지 복사하는 방식. 전부를 복사하여 새 주소에 담기 때문에 참조를 공유하지 않는다. C++은 C스타일을 배열을 대체하는 std::array을 제..
1장 리스트, 스택, 큐 - 자료 구조의 유형 응용 프로그램에서 필요한 기능을 구현하고, 동작 성능과 안정성을 확보하려면 적절한 자료 구조를 선택하는 것이 중요하다. 자료구조는 크게 연속된 자료 구조와 연결된 자료 구조로 구분할 수 있다. 연속된 자료구조 연속된 자료 구조(contiguous data structure)는 모든 원소를 단일 메모리 청크(chucnk)에 저장한다. 메모리 청크: 하나의 연속된 메모리 덩어리 BA = 시작주소 sizeof(type) = 원소 하나에 필요한 메모리 크기 바깥쪽 큰 사각형은 모든 원소가 저장되어 있는 단일 메모리 청크를 나타내고, 안쪽 작은 사각형들은 각각의 원소가 저장된 메모리 공간을 의미한다. 이 그림에서 모두 같은 타입(type)을 사용하고 있으니 즉, 모두 같은 크기의 메모리를 사용한다. 이는 size..