STL

stl은 c++언어로된 라이브러리다. 크게 4개로 구성되어있다. -알고리즘(algorithm) -컨테이너(container) -반복자(iterator) -함수객체(functor) 기본이 되는 컨테이너는 c++로 구현된 잘 다듬어진 자료구조라고 보면된다. 그러나 게임관련쪽에서는 stl이 무거워서 새로 정의해서 쓰기도한다. 보통 실무에선 stl을 쓴다고한다. stl구현의 핵심은 템플릿이다. 컴파일할때 결정되는 다형성을 지니게 해준다. stl의 컨테이너는 크게 연관컨테이너(associative container),순차컨테이너(sequence container)로 나뉜다. 컨테이너란 객체를 담는 객체라고 생각하면된다. 객체를 저장하고,정렬 삭제 추가 등등을 할수있게 해주는 기본베이스이다. 순차컨테이너 : vector,list,deque가 있다. 그외에도 slist라던가 있지만 list를 알면 slist는 따라온다.  자료에 순서를 두기때문에 sequence container라고 칭한다. 연관컨테이너 : set,multiset,map,multimap이 있다. 자료의 순서보단 자료간의 관계를 중심으로 두기때문에 associative container라고 칭한다. 자료구조를 공부해보면 알겠지만 자료에 접근하기위해선 자료를 가리키는 무언가가  필요하다. C에서 자료구조를 구현하기위해 포인터를 사용한 경험이있을탠데, stl에선 반복자(iterator)개념을 사용하여 구현한다. iterator는 탬플릿클래스이다. 내부에 알고리즘,탐색등등 유용한 멤버함수와 객체를 가르키는 포인터가 있는 아주 강력한 클래스이다. vector ::iterator iter;     //int를 담는vector구조의 iterator 'iter'를 생성한다. 이렇듯 iterator를 사용하고자 하는 자료구조에 맞춰서 생성시켜줘야한다.

시스템 프로그래밍

-아스키코드와 유니코드 아스키코드 - 1바이트로 표현된다. 알파벳과 확장문자를 표현할수있다. 256개가 안넘어가서 1바이트로 표현한다. 유니코드 - 아스키코드로는 다른국가에서 사용하는 문자들을 표현할수없다. 그래서 유니코드가 나왔다. 유니코드는 2바이트를 사용한다. 65536개의 문자를 표현가능하다. 전세계문자를 표현가능하다. 문자셋이란? 약속된 문자의 표현방법. SBCS(Single Byte Character Set) -1바이트만 사용하는방식. 아스키코드가 대표적이다. MBCS(Multi Byte Character Set) -문자를 표현하는 데 있어서 다양한 바이트 수를 사용해서 문자를 표현하는 방식. 어떤문자는 1바이트,어떤문자는 2바이트로 표현한다. SBCS를 포함하는 개념이다. 영어사용시 1바이트 한글사용시 2바이트 이런식으로 유동적으로 사용한다. 그만큼 사용시 주의해야한다. WBCS(Wide Byte Character Set) -유니코드방식이다. 모든 문자를 2바이트로 표현한다. 유니코드방식을 사용하려면 문자를 다룰때 앞에 L을 붙여야함 wchar_t str[] = "ABC";  //오류 wchar_t str[] = L"ABC"  // 정상. 2바이트씩 NULL도 2바이트로 표현됨

c++)Friend에관해

class A { … friend void Func(); } void Func() { …           //class A의 모든 멤버를 접근 제한 없이 사용할 수 있다. } 단점) OOP의 장점인 캡슐화의 성능을 저해시킨다.

c++)오버로딩

컴파일러는 기본타입에 대한 연산자를 제공한다. ex)int a = 10,b=10; a+b ;  //결과는 20 그러나 사용자 정의타입에는 연산에 대한 정의가 되있지않기때문에 불가능하다. class point {  ………… } point a(10),b(10); a+b;    //오류! 연산정의가 안되있음 이때 연산자 오버로딩을 사용하면 사용자 정의타입끼리 연산이 가능하다. (코드의 직관성과 가독성을 높이기위해서 ) void operator+(point rhs) { } p1 + p2  //  p1.operator+(p2)와 같은 표현 오버로딩이 가능한 단항연산자 종류 {!,&,~,*,+,-<++,--} 컴파일러가 정의해논 ++연산자 void operator++() //전위 ++ 연산자 void operator++(int) //후위 ++연산자 이떄 int는 전위 후위를 구분하기위해 의미없는(dummy)정수형 인자를 전달 //////////////////////////////////////// 오버로딩이 가능한 이항연산자의 종류 { +,-,*,/,==,!=,<,<= 등등} 사용방법은 단항연산자와 동일,인자로 같은클래스(혹은 원하는 객체) 받음 //////////////////////////////////////// 전역함수로 연산자 오버로딩하기 기본적으로 point x,y; x+y ; 는 x.operator+(y)와 같다. 그러나 k + x; //k는 다른 어떠한 객체 에서는  x.operator+(k)가 아니다. operator+(k,x)가 된다. 이때 k는 오버로딩 객체가 아니므로 전역 함수 연산자 오버로딩을 사용해야한다. 그러나 클래스 내부가 아니기때문에 멤버변수에 접근이 불가능하므로 getter ,sette...

C언어 파일입출력문제

두개의 텍스트파일이 같은지 다른지 확인하기 공백하나라도 틀리면 다른파일이다. 1. fgetc로 하나씩 비교하기 2. feof로 언제까지 읽을지.. 구하기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include      void main() {     FILE* fp1 = fopen("data1.txt", "r+t");     FILE* fp2 = fopen("data2.txt", "r+t");       char ch1, ch2;     int check = 1;     while (!feof(fp1) && !feof(fp2))     {         ch1 = fgetc(fp1);         ch2 = fgetc(fp2);           if (ch1 != ch2) {           ...

SnS로 버튼누르면 새로운창으로 교체하기

버튼을 눌렀을때 (시그널)->이벤트함수 호출(슬롯) hide()메서드 호출 -> 원래 있던 창이 숨겨짐 새로운 윈도우창 생성 -> 동적할당 후 show()

Qwidget

버튼을 버튼안에 넣을수있다. 자식을 생성할때 부모를 참조하면된다. 부모가 제거될때 자식도 사라진다. 이런식으로 계층구도를 짜나갈수있다. 자식의 위치는 부모의 위치기준으로 생성된다. //////////////////////////////////////// QWidget은 콘테이너형식이다. 담을수있는 공간이라고보면됨. //////////////////////////////////////// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include   < QApplication > #include   < QPushButton > int  main( int  argc,  char   * * argv) {  QApplication app (argc, argv);  QWidget window;  window.setFixedSize( 100 ,  50 );  QPushButton  * button  =   new  QPushButton( "Hello World" ,  & window);  button - > setGeometry( 10 ,  10 ,  80 ,  30 );  window.show();   return  app.exec(); } Colored by Color Scripter cs window라는 이름의 위젯을 생성한다 ->콘테이너가 되줌 window의 크기를 설정 window를 부모로 하는 자식버튼 동적으로 생성 버튼 생성위치 설정 window를 보...