@ 16. 1 ~ 17. 1/C++
-
동적 라이브러리와 정적 라이브러리@ 16. 1 ~ 17. 1/C++ 2016. 12. 26. 20:34
라이브러리는 제목 처럼 2개로 나뉜다.1. 동적 라이브러리는 라이브러리 코드가 외부에 존재하여 프로그램 실행시 외부 라이브러리를 찾아서 링크하여 사용하는 방식2. 정적 라이브러리는 컴파일 타임에 라이브러리 코드를 실행 파일로 복사하여 사용하는 방식이다. 동적 라이브러리흔히 윈도우에서 사용하는 dll파일이 동적 라이브러리를 사용하는 예이다.라이브러리 코드가 dll에 있기 때문에 실행파일의 크기가 작아진다는 장점이 있다.다만, dll파일에 의존하게 되기 떄문에 해당 라이브러리가 설치되어 있지 않으면 프로그램 실행이 불가능하게 된다. 정적 라이브러리라이브러리 코드를 실행파일 안에 복사해 넣기 때문에 실행파일의 크기가 커진다.외부 의존관계가 없어(dll파일 같은게 필요없음) 라이브러리 설치 없이 홀로 실행이 가..
-
다시 C++ 정리@ 16. 1 ~ 17. 1/C++ 2016. 11. 15. 01:58
프로그래밍 디자인(디자인하느라 하루종일 투자해도된다)--------------------------------------------------------------------------------------------------------------------------------------------------------- 1. 공통적인 부분을 우선 모아보기2. 추상화~~ 인터페이스 나누기 서브시스템 확인하기..서브 시스템이란..예를들어 최상위 객체? mgr개념의 클래스와 일반 객체 클래스까지 포함하는 최상위 클래스를 기능별로 나눈것.. 그리고 각 서브시스템의 인터페이스와 상호연동을 정의하는 것이다. 표로 만든다면서브시스템 이름 | 인스턴스 개수 | 서브시스템 기능 | 공개된 인터페이스 | 어떤 서브시..
-
클래스 메서드와 데이터 멤버에 대한 포인터@ 16. 1 ~ 17. 1/C++ 2015. 11. 18. 19:26
함수포인터는 C++ 에서는 typedef로 선언해서 해당함수의 파라미터와 리턴타입에 호환되는 함수를 이용하면되는데.. typedef bool(*Func)(int, int); //Func 타입을 선언해서 두개의 int 파라미터와 bool타입 리턴값을 가지는 함수 포인터를 표현 Func func1; //선언한뒤에 bool test(int num1, int num2) {} //이런식의 함수가 있다면 func1 = test; 또는 포인터이니까 func1 = &test로 하면된다. C++11에서는 타입 에일리어스 기능이 있어 typedef bool(*Func)(int, int); 이걸 이렇게 using Func = bool(*)(int, int); 이런식으로 표현이 되며 Func func1; //똑같이 사용이 가..
-
난수, rand() 함수@ 16. 1 ~ 17. 1/C++ 2015. 11. 17. 19:25
나머지 기반 난수 발생기의 결점은 기본적으로 rand함수 때문에 생기는 것이다. rand함수는 20억 주기의 값들을 돌려주지만, 나머지를 적용하면 그 주기가 줄어든다. rand 함수가 생성한 수들의 하위 비트들에는 패턴이 존재하며, 그 패턴의 주기는 20억보다 훨씬 짧다. 그런데 나머지는 본질적으로 수의 상위 비트들을 잘라내므로 결과적으로 나머지를 통해 얻은 난수들의 주기가 원래의 난수들보다 훨씬 짧아지게 된다. 즉, 패턴이 좀 더 자주 반복되는 것이다. 패턴이 좀 더 나은 난수 생성기를 만들기 위해서는 하위 비트들이 아니라 상위비트들을 보존 활용해야한다. 나누기를 이용한 범위 결정 상위 비트를 보존 활용하는 가장 쉬운 방법은 나누기 연산자를 사용하는 것이다. number = ((6 * rand()) /..
-
Understanding and Using C Pointers(기억이 잘 안나는 부분)@ 16. 1 ~ 17. 1/C++ 2015. 6. 28. 01:49
1. 포인터 선언을 읽는 방법 포인터 선언을 뒤에서부터 읽음으로써 선언을 점차적으로 이해할 수 있음. const int *pci 이것은?? (뭐 지금까지 공부한 내용으로는 const *왼쪽에 있으니 int* 값이 상수다..이미 결론이 나오지만..) (*pci=값 수정 안됨) const int *pci; // 변수 pci const int *pci // 포인터 변수 pci const int *pci //정수를 가리키는 포인터 변수 pci const int *pci //상수 정수를 가리키는 포인터 변수 pci 2. 정수와 포인터를 저장하는데 같은 크기의 바이트를 사용하지만..이 둘은 같은 데이터 타입이 아니다. 그러나 정수를 정수 포인터로 캐스팅하는 것은 가능하다.. int *pt; int num=1; pt..
-
전문가를 위한 C++ 정리(3)@ 16. 1 ~ 17. 1/C++ 2015. 4. 21. 14:52
50.2. multimap multimap은 아래 몇가지 빼고는 map과 같다. 1. operator[]을 지원하지 않음 2. map inset()는 pair를 리턴했지만 multimap의 insert는 반복자를 바로 리턴 3. find메서드도 임의의 항목만 리턴(임의다!!) 50.3 set map과의 차이점은 키/값 쌍 대신에 값 자체가 키역활을 함. 그리고 operator[] 지원x * multiset도 있다. 51. 비순차 연관 컨테이널 - 해시테이블 51.1.1 해시 테이블..? 새로운 컨테이너 항목을 저장할때 정렬을 하지 않는다. unordered_map, set, multimap, multiset : 테이블 구현시 버킷?이라는 배열을 만들고..해시함수의 키를 이러한 버킷에 인덱스 번호로 매핑...
-
전문가를 위한 C++ 정리(2)@ 16. 1 ~ 17. 1/C++ 2015. 4. 13. 00:15
전문가를 위한 C++. 1 저자 마크 그레고리, 니콜라스 솔터, 스캇 클레퍼 지음 출판사 한빛미디어 | 2013-10-01 출간 카테고리 컴퓨터/IT 책소개 더 쉽게, 더 빠르게, 더 깔끔하게 프로그래머가 알아야 할 C+... 글쓴이 평점 38. 유니폼 초기화! C++ 11 객체 생성시 생성자 매개변수 전달시.. A a(10, 20); 이렇게 하는걸 A a{10,10}; 이렇게 괄호를 대괄호로 하면 좋다. 왜냐면..음.. stl컨테이너에도 이용할 수 있으.. vector myvec; myvec.push_back(1); myvec.push_back(2); 이렇게 하는걸.. 유니폼 초기화를! 딱! vector myvec={1,2,3}; 또는 = 빼고 해도됨.. 이렇게 딱.. 동적 할당 배열ㅇ도..int* p..