[STL] List

프로그래밍 2014. 3. 6. 23:52

오늘은 List에 대해 정리해 볼까 합니다.

 

LIST

 리스트들은 연속적인 컨테이너 종류중 하나입니다. 원소들은 선형 연속성에 의해 정렬되어 있습니다. 리스트 컨테이너 들은 더블 링크드 리스트의 한 종류이며, 더블 링크드 리스트들을 사용해 메모리 상으로 인접하지 않은 곳(다른곳)에 원소들을 저장할수 있습니다. List를 정렬시 각각의 원소들이 앞에 링크된 원소와 뒤따르는 원소의 연관관계에 의해 정렬됩니다.

LIST의 장점으로는 컨테이너의 특정 위치에 원소 삽입, 삭제가 효율적이며, 앞(forward) 혹은 뒤(backward)방향으로 반복 접근이 가능한 장점이 있습니다. 위에서 작성한것과 같이 메모리 상에 꼭 인접한 공간에 할당되지 않으므로 효율적인 이동이 가능합니다.

다른 기본 표준 연속 컨테이너(벡터, 덱)과 비교하면, 리스트는 컨테이너 안의 어떤 위에 있는 원소들의 삽입, 추출, 이동의 수행능력이 좋습니다.

한편 단점으로는 리스트는 요소에 대한 직접접근이 불가능합니다. 예를 들자면, 리스트에 있는 다섯번째 자리에 있는 요소에 접근 하려고 하면 이미 알고 있는 자리에서부터(첫번째 혹은 마지막) 차례차례 접근하는 수밖에 없습니다. 따라서 요소에 접근하는 시간이 추가적으로 소요되게 됩니다. 또한 리스트들은 각각의 원소들을 연결시켜 놓기 위해 Link되는 포인터 부분이 존재하기 때문에 데이터 저장공간 외에 추가적으로 Pointer 메모리를 추가적으로 사용합니다. 만약에 작은 용량이 아닌 큰 사이즈의 리스트를 사용할 때 이 부분이 문제가 될수 있으므로 주의해야 합니다.

리스트가 확장되거나, 필요에 의해 작아질때  리스트의 크기는 STL에서 자동적으로 조절합니다.

C++ 표준 템플릿 라이브러리의 리스트 에서는 두개의 파라메터를 갖습니다.

 

template <class T ,class Allocator = allocator<T>> class list;

    T : 요소의 타입

    Allocator : 용량 할당 model를 정의하기 위해 사용된 allocator 객체(object)타입

 

Member functions

 

Iterators

 

Capacity

 

Element access

 

Modifiers

 

Allocaotr

 

Operations

 

Member types

of template <class T, class Allocator = allocator<T> class list;

 

'프로그래밍' 카테고리의 다른 글

멀티 스레드  (0) 2014.12.13
파이썬 argparse  (0) 2014.11.08
[STL] Vector  (0) 2014.03.05
PHP document  (0) 2014.02.23
APM으로 서버 구동하기(설치) - AutoSet  (0) 2014.02.23

[STL] Vector

프로그래밍 2014. 3. 5. 01:43

Vector

Vector 들은 연속된 컨테이너의 한 종류입니다. 일반 배열들과 같이 vector 컨테이너들은 인접한 저장 위치에 저장되어 있습니다. 따라서 요소들을 단지 반복자(iterator)를 사용하지 않고도 특정 offset(포인터)로 접근이 가능합니다.

 

일반적으로 vector의 저장용량은 필요에 따라 확장되고, 용량은 자동적으로 계산됩니다.

 

Vector의 가장큰 장점으로는 특정 인덱스로 각각의 요소에 접근 가능 함에 있습니다. 또한 끝에서 요소를 추가하거나 제

거함에 편리합니다. 배열과 비교해서 vector는 거의 같은 기능을 제공합니다. 추가로 vector는 쉽게 크기를 바꿀수 있는

기능도 가지고 있습니다. 일반적으로 용량이 자동적으로 다루어지기 때문에 배열과 비교하면 vector는  더욱 많은 메모리

용량을 사용합니다. 그리고 list보다 일관된 iterator reference를 적게 가지고 있습니다.

 

내부적으로 vector는 내부에 저장된 요소들이 얼마나 있는지(개수)를 나타내는 크기를 가지고 있습니다.(size) vector의

경우에는 할당받은 용량이 모두 사용되지 않을수도 있습니다. vector의 경우 매번 할당받을 경우 부하가 걸리기 때문에

미리 할당을 해두고 용량을 사용하는게 좋습니다.

 

Template <class T, class Allocator = allocator<T>> class vector

위의 템플릿 파라메터들은 다음과 같은 뜻을 갖습니다.

T : 요소 타입

Allocator : 용량 할당 모델을 정의하기 위해 사용된 allocator 객체의 기본 타입, 기본적으로 타입 T를 위한 allocator클

                래스 템플릿은 단순한 메모리 할당 모델을 정의하고 독립적인 값을 위해 사용됩니다.

 

vector 멤버함수를 위한 참조에서의 같은 이름들은 템플릿 파라메터들로 추측할수 있습니다.

 

Member function

 

Iterator

 

Capacity

 

Element Access

 

Modifiers

 

Allocator

 

Member types

Of template <class T, class Allocator = allocator<T>> class vector

 

'프로그래밍' 카테고리의 다른 글

멀티 스레드  (0) 2014.12.13
파이썬 argparse  (0) 2014.11.08
[STL] List  (0) 2014.03.06
PHP document  (0) 2014.02.23
APM으로 서버 구동하기(설치) - AutoSet  (0) 2014.02.23

다각형 나머지 한점 구하기(다각형의 넓이)

수학 2014. 3. 2. 23:07

직교 좌표계에서 각 꼭지점의 좌표가 그 내부를 반시계방향으로 도는 순서대로 (x1, y1), (x2, y2), ..., (xn, yn)로 주어져 있는 단순한 다각형의 넓이 A는 다음과 같이 계산할수 있습니다.

이 공식은 1769년 마이스터가, 그리고 1795년 가우스가 사용하였다고 한다. 이 공식은 다각형을 삼각형들로 나누어 생각함으로써 증명할수 있습니다.

자세한것은

위키피디아 다각형 : http://ko.wikipedia.org/wiki/%EB%8B%A4%EA%B0%81%ED%98%95#.EB.84.93.EC.9D.B4 

참조하시면 됩니다.

 

그러면 이 공식을 참조해 사각형의 경우 세 개의 꼭지점을 알때 나머지 한점을 구하는 알고리즘을 계산해 봅시다.

벡터의 내적을 이용하여 좌표평면에서 사각형의 넓이 최대값을 구합니다.

 

참고

각 변의 길이가 s인 정 n각형의 넓이는

로 구할수 있습니다.

 

 

'수학' 카테고리의 다른 글

고유값, 고유벡터  (0) 2014.10.14
Newton_Raphson Method  (0) 2014.09.03
사인법칙  (0) 2014.02.26
함수의 극값 구하기  (0) 2014.01.29
가우스 정규분포 (Gaussian Normal Distribution)  (0) 2014.01.29