본문 바로가기

전체 글

(228)
템플릿(template) 템플릿은 C++ 언어의 특징 중 하나인 일반화 프로그래밍이 지원하는 대표적인 기능 중 하나이다. 일반화 프로그래밍은 데이터를 중시하는 객체 지향 프로그래밍과는 달리 프로그램의 알고리즘에 중점을 둔다. 템플릿 템플릿은 매개변수의 타입에 따라 함수나 클래스를 생성하는 메커니즘이다. 템플릿은 타입이 매개변수에 의해 표현되므로, 매개변수화 타입이라고 불린다. 템플릿을 이용하여 타입별 함수나 클래스를 만들지 않고, 여러 타입에서 동작할 수 있는 하나의 함수 혹은 클래스를 작성 가능하다. 함수 템플릿 // 문법 template 함수 원형 { // 정의 } typename 키워드 이전에는 class 키워드를 사용하였고, 현재도 typename 과 class 를 같은 것으로 간주한다. // 함수 템플릿 template..
백준 1920 이진 탐색을 이용한 문제 풀이 #include #include #include using namespace std; void Compare(vector &in, vector &qu, vector& out, int num, int first, int last) { while (first > input; for (int i = 0; i > num; inputs.push_back(num); } sort(inputs.begin(), inputs.end()); cin >> input; vector qu; for (int i = 0; i > num; qu.push_back(num); } vect..
콜백 함수 기본적인 함수들은 어느 때에 맞춰 불려진다. 그런데 때때로 어떠한 신호에 의해 정해놓지 않은 시기에 함수가 호출되는데, 이를 콜백 함수라고 하며, 프로그래밍에서는 인수로 함수 포인터를 받아서 사용할 수 있는데 이때 함수 포인터가 가리키는 함수가 callback 이다. int Sum(int a, int b) { return a+b; } int Cal(int a, int b) { return a*b; } int Func(int a, int(*pf)(int,int)) { return pf(a,a+5); } int main() { cout
허상 포인터(댕글링 포인터) 댕글링 포인터? 해제된 메모리 영역을 가리기는 포인터를 댕글링 포인터라고 한다. int *a = new int(10); int *b = a; cout
L-value, R-value L-value, R-value 는 c++11 이전과 이후로 개념을 다르게 잡는다. c++11 이전에는 연산에서 왼쪽에 존재 할 수 있는 값, 오른쪽에 존재해야하는 값으로 L-value, R-value를 나눌 수 있다. c++11 이후에도 맞는 말이지만 좀 더 추가된 개념이 있다. lvaue 등호의 왼쪽과 오른쪽 전부 존재 가능 식별자를 가지고 있다. 해당 문장을 벗어난 후 사용 가능하다. 주소 연산자로 주소를 구할 수 있다. 참조를 리턴하는 함수. rvalue 등호의 오른쪽에만 존재 가능. 식별자가 없다 해당 문장에서만 사용 주소 연산자로 주소를 구하는게 불가능하다. value 를 리턴하는 함수, 임시객체 등등 int a = 0; int b = 25; // a,b 는 Lvalue로 식별자를 가지는 변수로..
백준 10845 #include #include #include using namespace std; class Queue { private: int* queue; int first = 0, end = 0; int index = 0; int output = 0; public: Queue(int num) { queue = new int[num]; } ~Queue() { delete[] queue; } public: void Push(int num) { queue[index] = num; index++; } int Pop() { if (first == index) { return -1; } else { output = queue[first]; first++; return output; } } int Size() { if (..
백준 4153 #include #include using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); while (1) { int a, b, c; cin >> a >> b >> c; if (a == 0 && b == 0 && c == 0) { break; } else if (sqrt((a * a + b * b)) == sqrt(c * c) || sqrt((a * a + c * c)) == sqrt(b * b) || sqrt((b * b + c * c)) == sqrt(a * a)) { cout
백준 11654 #include using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); char a; cin >> a; int as = (int)a; cout