'C++'에 해당되는 글 2건

  1. 2016.09.03 벡터에서 reserve와 resize를 하는 이유
  2. 2016.09.01 함수포인터 활용
프로그래밍/C++2016. 9. 3. 18:03

STL의 컨테이너는 처음할당한 메모리 크기보다 데이터가 많아질경우.

메모리를 재할당 하는 작업을 한다.

원래 갖고있던 메모리의 데이터를 새 메모리(크기가 더  큰)에 복사하는 방식으로 재할당을 한다고 한다.

원래 메모리의 용량을 늘리는것이 아닌. 더큰 메모리를 만들어서 그곳에 복사 하고 이전 데이터를 삭제하는 식이다.

이것은  속도상 효율적이지 않다.

그래서 reserve함수를 사용하게 되는데. 이 함수를 사용하면. 메모리 초기값을 잡아놓고 하는것이기 때문에

필요없는 재할당을 최소화 시켜준다.


resize함수는. 내부용량을 딱 정해놓고 사용하는 것이다.

만약에 사이즈를 10으로 해놨을 경우. 무조건 사이즈는 10이된다.

10보다 큰 데이터가 들어오면 끝의 요소들은 버려지게 된다.

내부를 10개보다 적게 채워도 사이즈는 10으로 유지하게 된다.


Posted by JinFluenza
프로그래밍/C++2016. 9. 1. 01:25

오늘 UI에서 버튼만드는 것을 했는데. 예전에 windows api공부할때 썻던 함수포인터가 생각나서 다시 복습해봤다.

개념은 아주 간단하다. 버튼을 예로 들자면

버튼 클래스에 함수를 담을수 있는 변수를 만들어놓고, 그곳에 원하는 함수를 저장한 다음에 해당 버튼이 클릭됬을때

해당 버튼에 저장된 함수를 실행하는 방식이다.


#include <iostream>

using namespace std;

 

 //이부분은 가독성을 위해. 의미는 반환형 void,인자로 void를 받는 함수를 저장할수있는 함수포인터를 만드는것 이다.

typedef void(*CallBackFunc)(void); 

 


void SoundUp() { cout << "SoundUp" << endl; } //소리를 키워주는 함수

void SaveData() { cout << "SaveData" << endl; } //데이터를 저장해주는 함수

void ExitGame() { cout << "ExitGame" << endl; } //게임을 종료하는 함수.


struct Button                                               //버튼 구조체.

{

CallBackFunc ButtonFunc;    //아까 typedef로 선언해둔것을 사용한다. 반환형 void 인자로 void를 받는 함수를 저장할수있는 함수 포인터 변수 선언

void ClickButton()

{

ButtonFunc();

}

};


void main()

{

Button temp;

temp.ButtonFunc = SoundUp; //함수 포인터에 SoundUp함수 저장.

temp.ClickButton();


temp.ButtonFunc = SaveData; //함수 포인터에 SaveData함수 저장.

temp.ClickButton();


temp.ButtonFunc = ExitGame; //함수 포인터에 ExitGame함수 저장.

temp.ClickButton();

}


출력결과

SoundUp

SaveData

ExitGame

Posted by JinFluenza