12월, 2022의 게시물 표시
{{ label!='' ? 'Label : ' : (q!='' ? '검색 : ' : '전체 게시글') }} {{ label }} {{ q }} {{ ('('+(pubs|date:'yyyy-MM')+')') }}

[C++] 스터디 CPPALOM 7주차: 뇌를 자극하는 C++ STL Chap 2-3

파워 포인트 파일(.pptx)을 Markdown으로 변환하여 업로드하였음) # <br>CPPALOM # <br>7주차 – 뇌를 자극하는 C++ STL Chap 2-3 한수빈 # <br>함수 포인터 * 함수 포인터는 함수의 시작 주소를 저장하는 포인터이다. * 정수형 변수와 포인터 변수의 용례는 다음과 같다: * 함수 역시 포인터로 주소를 저장할 수 있다. * 반환형 (*이름)(인자) * void (*pf)(int) ```C++ void main() { int n = 10; int *pn = &n; } ``` ```C++ void Print(int n) { cout <<"정수: "<< n << endl; } void main() { // void Print(int n)의 함수 포인터 선언 void (*pf)(int ); // 함수의 이름은 함수의 시작 주소 pf=Print; Print( 10 ); //1. 함수 호출 pf( 10 ); //2. 포인터를 이용한 함수 호출, 첫 번째 방법 (*pf)( 10 ); //3. 포인터를 이용한 함수 호출, 두 번째 방법 cout << endl; cout << Print << endl; cout << pf << endl; cout << *pf << endl; } ``` ```C++ 정수: 10 정수: 10 정수: 10 00CD1154 00CD1154 00CD1154 ``` # <br>함수 포인터의 종류 * C++에서 함수는 정적 함수와 멤버 함수로 나눌 수 있다. * 정적 함수로는 전역 함수, namespace 내의 전역 함수, static 멤버 함수가 해당된다. * 함수 호출은 세 가지가 가능하다. * 정

[C++] 스터디 CPPALOM 6주차: 열혈 C++ 프로그래밍 Chap 13-16

(파워 포인트 파일(.pptx)을 Markdown으로 변환하여 업로드하였음) # <br>CPPALOM # <br>6주차 - 열혈 C++ 프로그래밍 Chap 13~16 한수빈 # <br>함수 템플릿 * 함수 템플릿은 함수를 만들어 낸다. * 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다. * 이러한 정의를 함수 템플릿(function template)이라 한다. * 그리고 이러한 정의로 컴파일 시기에 생성된 함수들을 템플릿 함수(template function)이라 한다. ```C++ template <typename T> T Add(T num1, T num2) { return num1+num2; } int main(void) { cout<< Add<int>(15, 20) <<endl; cout<< Add<double>(2.9, 3.7) <<endl; cout<< Add<int>(3.2, 3.2) <<endl; cout<< Add<double>(3.14, 2.75) <<endl; return 0; } ``` # <br>둘 이상의 타입을 지닌 템플릿 함수 typename 키워드 대신 class를 활용할 수 있다. 쉼표를 이용해서 둘 이상의 템플릿 타입을 명시할 수 있다. ```C++ template <class T1, class T2> void ShowData(double num) { cout<<(T1)num<<", "<<(T2)num<<endl; } int main(void) { ShowData<char, int>(65); ShowData<c

[C++] The C++ Programming Language: 11. Select Operations (1) - Lambda Expressions

 11.4 Lambda Expressions   람다 표현식(lambda expression)은 람다 함수 혹은 그냥 람다라고 하기도 합니다. 익명 함수 객체를 이야기하는 것이죠. operator()를 지닌 이름 있는 클래스를 정의하고 객체를 생성한 뒤 비로소 그것을 실행하는 것 대신 간단하게 사용할 수 있습니다. 특정한 알고리즘을 인자로서 전달하고 싶을 때 유용하게 사용할 수 있습니다. 가령 GUI에서 콜백이라고 불리는 연산들과 같이요.   람다 표현식은 다음으로 구성되어 있습니다. 비어있을 수 있는 캡처 리스트(capture list). 람다 표현식의 바디에서 사용될 수 있는 정의 환경에서의 이름을 명세합니다. 참조로서 접근하거나 복사될 수 있습니다. capture list는 []로 구분됩니다. 선택적인 매개변수 리스트(parameter list). 람다 표현식이 필요로 하는 인자들을 명세합니다. ()로 구분됩니다. 선택적인 mutable 지시자. 람다 표현식의 바디가 변경될 수도 있음을 표현합니다. 선택적인 noexcept 지시자. 선택적인 반환 타입. 다음과 같은 형태를 지닙니다: -> type 바디. 실행될 코드이며, {}로 구분됩니다.   이들의 세부 사항은 나중에 이야기할 것이며, 지역 변수의 "캡처"라는 개념은 함수에 제공되는 것이 아닙니다. 이는 람다가 지역 함수로서 행위할 수 있다는 것을 의미합니다. 함수가 그렇지 않더라도요. 11.4.1 Implementation Model   람다 표현식은 다양한 방법으로 구현될 수 있습니다. 그들을 최적화할 수 있는 효과적인 방법들도 있죠. 람다의 의미를 이해하기 위해서 함수 객체의 정의와 사용을 고려해볼 수 있죠. 다음 예제를 봅시다: 1 2 3 4 5 6 7 void  print_modulo( const   vector < int > &  v, ostream &  os,  int  m)      // output v[i] to os if v[i]%m==