728x90
반응형

STL 5

동적 크기 배열 구현하기, STL 직접 구현 (std::array)

배열에서 중요한 것은 배열의 크기와 해당 배열의 접근 방법이다. 때문에 생성자에서 배열의 크기와 해당 배열을 가리키는 포인터를 항상 알고 있어야 한다. 이를 염두한 채 구현해보자 #include #include //필요한 헤더파일 포함시키고 //동적 배열 클래스를 만들어보자 (임의의 타입을 위해 템플릿 선언) template class dynamic_array { T* data; // 해당 배열을 가리키는 포인터 (동적할당 받음) size_t n; // 배열 사이즈 public: //배열의 크기를 인수로 받는 생성자. dynamic_array(int n) { this->n = n; // 이 함수를 call한 객체의 n을 설정 data = new T[n]; // 해당 n만큼 배열 동적할당받음 } //복사 ..

C++에서 vector의 단점을 극복한 deque

[프로그래밍언어(Programming Language)/C || C++] - Deque, 덱 , 자료구조 [CPP] 물론 덱에 대한 글은 썼지만 그냥 사용법만 적어놨다. 아무래도 모든 자료구조는 trade-off 관계일 수 밖에 없다. 하지만 이익을 최대한보고 손해를 최소한으로 하는 인간의 끊임 없는 노력은 vector의 단점마저 극복하고자 하였다. vector에서 push_front() 는 insert로 대신한다고 하였다. erase도 마찬가지다. 즉, 맨 앞에서 일어나는 삽입과 삭제는 cost가 높다. 즉, 시간이 오래걸린다. 그래서 사람들은 덱을 만들어냈다. 덱은 아래 3가지의 조건을 만족해야 한다. push_front(), pop_front(), push_back(), pop_back()에 있어서..

CS Interview 2021.06.15

C++ 에서의 자료구조 Array 대신 Vector를 쓰는 이유

C++에서는array도 제공하지만 vector도 제공한다. 왜 우리는 vector를 쓰는가? 우선 array는 컴파일할 때 크기가 결정된다. 즉, 미리 알고 선언해야한다는 말이다. 크기가 고정되어있으므로 원소의 데이터는 바꿀 수 있어도 원소를 추가하거나 삭제하는 일은 불가능하다. 또한 컴파일할 때 크기가 결정되므로 무조건 스택 메모리를 사용한다. 솔직히 거의 모든 응용프로그램에서는 데이터가 동적이며 크기도 고정되어 있지 않은 게 현실이다. 때문에 데이터의 크기를 미리 알고 있는 것은 어렵다 **다만 메모리가 많다면 미리 선언하는 것도 나쁘지는 않다고 본다. 하지만 효율적인 활용을 위해선, 위 상황을 제외하면 가변 크기의 데이터 컨테이너가 있었으면 좋겠다고 생각한다. 바로 그것이 vector이다. //1...

CS Interview 2021.06.15

STL 우선순위 큐, Priority Queue 사용법 [C++]

유용한 STL인 큐 중에서 우선순위 큐를 알아보자 그냥 큐와 무엇이 다른지도 알아보자 Priority queues are a type of container adaptors, specifically designed such that its first element is always the greatest of the elements it contains, according to some strict weak ordering criterion. 일반적으로 첫번째 원소가 제일 큰 값을 가지게 하는 컨테이너다. **물론 첫번째 원소가 제일 작은 값을 나오게 할 수도 있다. This context is similar to a heap, where elements can be inserted at any mome..

STL 벡터, vector 사용법 [C++]

메모리 heap에 생성되며 동적할당이 가능하여 동적 배열을 대체할 수 있는 std:: 를 알아보자 C++ STL 에서 컨테이너는 크게 두 가지 종류가 있다. 배열 처럼 객체들을 순차적으로 보관하는 시퀀스 컨테이너 (sequence container) 키를 바탕으로 대응되는 값을 찾아주는 연관 컨테이너 (associative container) 가 있다. 우리가 알아볼 벡터는 시퀀스 컨테이너다. 벡터에는 원소들이 메모리 상에서 실제로 순차적으로 저장되어 있고 따라서 임의의 위치에 있는 원소를 접근하는 것을 매우 빠르게 수행할 수 있다. 하지만 벡터가 만능인줄 알고 있는 사람들도 있지만 그렇지 않다. 맨 뒤에 원소를 추가하거나 제거하는 것은 빠르지만 임의의 위치에 원소를 추가하거나 제거하는 것은 O(n) 으..

728x90
반응형