본문 바로가기

C++33

[C++ STL] vector vector 연속된 메모리 기반의 컨테이너(배열 기반의 컨테이너)이다. 따라서 메모리를 먼저 잡아놓고 사용해야 한다. 그렇지 않으면 데이터를 추가할 때마다 메모리 재편성 작업을 한다. (vector는 메모리를 2중으로 관리하고 있다.(전체 길이와 데이터 개수) vector 메모리 재편성 STL 컨테이너는 데이터 삽입 시 메모리의 크기가 부족한 경우 메모리를 2의 증가율만큼 크기를 늘리도록 구현하고 있다. 재할당을 할 때 컨테이너가 원래 가지고 있었던 메모리에 저장된 모든 요소 데이터를 새 메모리에 복사하고 원래의 메모리에 저장된 모든 객체를 소멸시키고 원래 메모리를 해제한다. (할당 - 복사 - 소멸 - 해제의 비용이 들어간다.) 다음을 보면 메모리 재편성을 어떻게 하고 있는지 알 수 있다. 위 코드를 .. 2018. 3. 18.
[C++]랜덤함수 rand_s() 함수 rand()와 rand_s() 함수 랜덤 함수를 사용할 일이 있어서 rand() 함수를 찾던 중 rand_s()라는 함수가 있어서 찾아보았습니다. 먼저 랜덤 함수에 대해서 알아보겠습니다. rand() 함수 rand() 함수는 header에 포함되어 있는 함수이기 때문에 #include 를 추가해서 사용합니다. 구문 int rand( void ); 반환 값 난수를 반환하여 반환되는 오류는 없습니다. 설명 rand() 함수는 0부터 RAND_MAX(32767) 범위의 의사 난수 정수를 반환합니다. 난수 범위 지정 [0 ~9] int nData = 0; nData = (int)(((double)rand() / (RAND_MAX + 1) * 10)); [1 ~10] int nData = 0 nData = (in.. 2018. 3. 11.
[C++]함수 포인터 와 Class 함수 포인터 함수 포인터는 함수의 시작 주소 값을 가리키는 포인터 변수입니다. 함수 포인터 변수 형식 반환형 (*함수 포인터 변수 이름)(인수 목록); 의 형태를 가집니다. 코드로 보자면 다음과 같습니다. int func(int nData1, int nData2); int main() { int (*pFunc) (int, int) = nullptr; pFunc = &func; printf("%d \n", (*pFunc)(2,5)); return 0; } 위 코드를 보시면 반환형이 int형이고 인자로 int형 변수 2개를 받는 func() 함수가 있습니다. 그리고 이 함수를 가리킬 수 있는 함수 포인터 변수 int (*pFunc)(int , int)를 선언하고 nullptr로 초기화하였습니다. (포인터 변.. 2018. 2. 28.
[디자인 패턴]싱클톤 패턴(Singleton pattern) 싱글톤 패턴(Singleton pattern) 싱글톤 패턴은 프로그램이 시작될 때 최초 한 번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴입니다. 즉, 싱글턴 패턴은 클래스의 인스턴스 생성을 단 한 번으로 제한하여 사용하는 방식입니다. 싱글턴 패턴은 프로그램 내에서 공통적으로 쓰이는 자원을 관리, 저장하는 역할을 할 때 사용하거나, Connection pool, Thread Pool과 같은 공통된 객체를 여러 개 생성해서 사용해야 하는 경우에 많이 사용됩니다. (메모리, 리소스 등을 관리해야 하는 class를 싱클톤 패턴으로 만들어서 사용) 싱글톤 패턴은 class에 자기 자신을 static 멤버로 잡고, getInstance()라는 static 함수를 사용하여 자기 자신의 객.. 2018. 2. 28.
[C++]static 정적 변수와 Class static 정적 변수 static 정적 변수는 전역 변수의 성질과 namespace기능을 가진 변수입니다. static 정적 변수는 2가지 성질을 가집니다. 1.static 정적 변수는 프로그램이 시작될 때 메모리를 잡습니다. 즉, 프로그램이 시작될 때 정적 변수가 생성되고 초기화되며 프로그램이 종료할 때까지 존재합니다. (전역 변수의 성질) 2. static 정적 변수는 선언된 지역(scope)에서만 사용이 가능합니다. (지역 변수의 성질) void func(); int main() { func(); func(); func(); return 0; } void func() { static int nData = 0; nData++; printf("%d \n", nData); } func()라는 함수가 있.. 2018. 2. 27.