C++
-
등고선 알고리즘@ 16. 1 ~ 17. 1/알고리고리즘 2013. 9. 19. 23:38
등고선 알고리즘이란? 길찾기 알고리즘의 한 종류로 도착점에 0이라는 숫자를 넣고 주변을 검사하여 벽이 아닌 인접한 블록에 1로 쓴다. 다시 1 주변을 검사하여 벽이 아닌 인접한 블록에 2를 쓰고,이런 식으로 출발점까지 가장 적은 수가 나오는 경로를 찾아가는 알고리즘이다. 이러한 방법이 마치 등고선을 그리는 방법과 비슷하여 등고선법이라고 한다. 구현방법 1. 각 셀을 -1로 초기화 한다. -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 2. 도착점을 0으로 설정한다. -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 3. 도착점부터 각 셀에 순서대로 번호를 매긴다. -1 -1 4 -1 -1 3 -1 4 3 2 -1 -1 1 ..
-
항목4 : 객체를 사용하기 전에 반드시 그 객체를 초기화하자@ 16. 1 ~ 17. 1/Effective C++ 2013. 8. 25. 21:16
int x; 어떤 상황에서는 x의 값이 확실히 초기화되지만 또 다른 상황에서는 그것이 보장되지 않는다는 것입니다. 어떤 플랫폼의 경우에는 미초기화 객체를 읽기만 해도 프로그램이 서 버리기도 합니다. 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화하는 것이다. int x =0; const char *text="welcome to"; double d; cin >> d; //입력스트림에서 읽음으로써 초기화 수행 이런 부분을 제외하고 나면 c++ 초기화의 나머지 부분은 생성자로 귀결된다. 초기화를 하면서 대입과 초기화를 헷갈리지 않는 것이 가장 중요하다. 생성자에서 초기화는 멤버 초기화 리스트를 사용하는 것이며 그 외의것은 대입이 되고 있는 것이다. class Rational{ public: Ratio..
-
항목 20 : 값에 의한 전달 보다는 상수객체 참조자에 의한 전달방식을 택하는 편이 낫다@ 16. 1 ~ 17. 1/Effective C++ 2013. 8. 19. 22:06
기본적으로 C++는 함수로부터 객체를 전달받거나 함수에 객체를 전달할 때 값에 의한 전달(pass by value)방식을 사용한다. 특별히 다른 방식을 지정하지 않으면 함수 매개변수는 실제 인자의 사본을 통해 초기화되며, 어떤 함수를 호출한 쪽은 그 함수가 반환한 값의 사본을 돌려받는다. 이들 사본을 만들어내는 원천이 바로 복사생성자라고 한다. 그래서 값에 의한 전달이 고비용의 연산이 된다고 한다. 그래서 고비용을 없애기 위해 상수객체에 대한 참조자로 전달하게 만드는것이다. void 함수(매개변수 : const 객체명& a); 이렇게 하면 새로 만들어지는 객체 같은 것이 없다. 여기서 새겨둬야 할 부분은 매개변수 선언문에 있는 const이다. 원래의 값에 의한 전달이라면 void 함수(매개변수 : 객체명..
-
STL list 주요 특징 정리@ 16. 1 ~ 17. 1/STL 2013. 5. 27. 21:08
list의 가장 큰 특징 중 하나는 vector나 deque처럼 원소를 밀어내지않고 노드를 서로 연결하기만 하면 됨. 또한, 노드 기반 컨테이너의 삽입과 제거 동작은 반복자를 무효화시키지 않음. 아래는 예를 든 소스.. deque dq; dq.push_back(10); dq.push_back(20); dq.push_back(30); deque::iterator iter=dq.begin(); deque::iterator iter2; cout
-
STL vector / deque 주요 특징 정리@ 16. 1 ~ 17. 1/STL 2013. 5. 27. 19:46
vector는 임의 접근 반복자를 지원하는 배열 기반 컨테이너입니다. vector의 가장 큰 특징 중 하나는 원소가 하나의 메모리 블록에 연속(배열 기반 컨테이너)하게 저장된다는 것입니다. 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있음. 그래서 메모리 하당 크기를 알 수 있게 capacity() 멤버 함수가 있고, 한번에 메모리를 할당하고 사용할 수 있는 reserve()멤버 함수가 있다. 원소에 접근하는 것은 at()나 v[i]로 가능하며 둘다 같은 기능이지만, at()은 유효범위를 점검하여 안전하게 원소에 접근하나 접근속도가 낮지만 []은 그 반대이다. 유효점검 x 속도 up 또한 시퀀스 기반 컨테이너 이므로 원소가 서로 상대적인 위치를 유지하므로 가장 앞 요소와 가장 뒤 요소를 참조하..
-
스마트 포인터와 ->, *연산자 오버로딩@ 16. 1 ~ 17. 1/C++ 2013. 5. 21. 22:55
일반 포인터를 사용 후 delete를 호출하지 않으면 메모리가 누수가 발생하여 프로그램에 심각한 문제를 발생 그래서 쉽게 하기 위한 스마트 포인터가 등장! class Point{ int x; int y; public: Point(int _x=0, int _y=0) : x(_x), y(_y){} void Print() const{ cout 연산자의 경우 포인터를 리턴받고 *은 참조를 리턴받아 호출 저기서 PointPtr p1=new Point(1,2)의 경우 동적할당이긴 한데. 순서가 PointPtr의 생성자에 new Point(1,2) 동적할당한 값을 넣는것이다. 암시적 생성자를 Point = 10; 이렇게 생성하는건데.. 아무튼 PointPtr앞에 explicit를 붙이게 되면..좀더 명확히 써야한다...
-
싱글톤 클래스@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 5. 6. 21:22
클래스내 함수에서 매겨변수가 this일 경우 예를 들어 void Getinput(this); 일 경우 this 포인터 즉 자기자신의 객체가 들어가게 되는것..?? 싱글톤의 목적 1. 전역변수가 지닌 위험을 줄인다. 2. 전역변수와 같이 사용할 수 있게 한다. class Single{ public: static Single* instance(); static void destroy(); private: Single(); Single(const Single&); ~Single(); static Single* mInstance; }; 생성자와 소멸자가 private로 되어있다. 즉 아무도 호출할 수 없게 되어 있다. 복사생성자 조차 안된다. 이래선 사용할 수 없다고 생각하지만, 그걸 대비해서 create와 d..
-
(챕터 03) 이미지 파일을 사용하자(2)카테고리 없음 2013. 4. 30. 23:15
reinterpret_cast 란!? 특정 형 포인터에서 다른 형 포인터로 만들 때나 포인터와 정수를 서로 변환할 때 사용한다. 알파채널 투명여부를 판단하는데는 추가적인 정보가 필요하다. 현재 색은 적색, 녹색, 청색 세 가지밖에 없고 1바이트가 남는다.(unsigned) 이 남는 부분에 투명 불투명을 나타내는데 이것이 바로 알파채널.. 책에서는 투명과 불투명 두개를 나타내니..0과 1로도 충분하다고 하지만 1바이트가 남았으니 여유있게 128 이상과 미만으로 나눈다고 한다. 즉 0과 255라는 양끝 값을 대표값으로! 검은색은 0이요, 255는 흰색인지라.. (처음에는 왜 그런지 몰랐다.) 알파채널인지 여부 판단은 아래 if문 같이 한다고 한다. int alpha=(src&0xff000000) >> 24;..