[C++] FunctionAsParameters
·
C++
함수 포인터전통적인 방법함수 포인터는 함수 매개 변수로 보내져서 사용됨가독성과 재사용성이 떨어짐// input parmeter 타입: int// return 타입: voidvoid (*foo)(int); // input parameter 타입: int *// return 타입: void *void *(*foo)(int *); void foo() {};void bar() {};void f(int i, void (*f1)(), void (*f2)()){ if(i > 0) f1(); else f2();}int main(){ int i; cin >> i; f(i, foo, bar); return 0;}void my_int_func(int x) {};int main(){ void (*foo)(int); // 함수..
[C++] 알고리즘
·
C++
변경 알고리즘fill()지정된 범위의 모든 요소를 지정된 값으로 채움#include#includeunsing namespace std;int main(){ vector myvector(8); // myvector: 0 0 0 0 0 0 0 0 fill(myvector.begin(), myvector.begin()+4, 5); // myvector: 5 5 5 5 0 0 0 0}; copy() 하나의 구간을 다른 구간으로 복사#include#includeunsing namespace std;int main(){ int myints[] = {10, 20, 30, 40, 50, 60, 70}; vector myvector(7); // myvector: 0 0 0 0 0 0 0 copy(myints, myin..
[C++] 반복자
·
C++
반복자 iterator현재 처리하고 있는 자료의 위치를 기억하는 객체포인터와 유사연산자 사용 가능 ← 반복자가 가리키는 요소의 값을 추출하기 위한 역참조 연산++ 연산자 사용 가능(필수) ← 다음 요소를 가리키기 위함==, != 연산자 사용 가능 ← 두개의 반복자가 같은 요소를 가리키고 있는 지를 확인하기 위함#define N 3vector v1(N, 5);vector::iterator it = v1.begin();for(; it != v1.end(); it++) *it = 10;// 출력: 3 3 3 -> 5 5 5 Random acess iterator vs Bidirectional iteratorRandom acess iteratorvetor, dequeoperator [] 사용 가능산술 연산 가능..
[C++] 컨테이너
·
C++
순차 컨테이너자료를 순차적으로 저장벡터(vector)동적 배열처럼 동작뒤에서 자료들이 추가됨템플릿으로 설계Kvector와 유사push_back(): 새로운 데이터를 벡터의 끝에 추가하고 벡터의 크기를 1만큼 증가pop_back(): 벡터의 끝에서 요소를 제거하고 벡터의 크기를 하나 감소vector v1;vector v2(3); // 초기 값은 0으로, 크기 3만큼v2.size(); // 크기v2.max_size(); // 최대 저장 가능한 개수v2.empty();v2.capacity(); // 현재 저장 가능한 원소의 수#define N 3vector v3(N, 5); // 초기 값은 3으로, 크기 5만큼 v2[4] = 3; // 크기보다 큰 인덱스 값 수정 // 읽는 행위가 아니라 쓰는 행위라서..
[C++] STL
·
C++
STL: 표준 템플릿 라이브러리공통적으로 사용하는 자료 구조와 알고리즘들을 template으로 구현한 클래스namespce std에 포함되어 있음 컨테이너자료를 저장하는 구조벡터, 리스트, 맵, 집합, 큐, 스택과 같은 다양한 자료 구조들이 제공됨 반복자컨테이너 안에 저장된 요소들을 순차적으로 처리하기 위한 컴포넌트 알고리즘정렬이나 탐색과 같은 다양한 알고리즘 구현불변경 알고리즘데이터를 변경하지 않음변경 알고리즘데이터가 변경됨 auto형식을 컴파일러가 추론하여 결정선언 + 초기화할 때에만 사용 가능#define N 3template void print_vector(vector v, string s=""){ auto it = v.begin(); // vector::iterator it = v1.begin(..
[C++] Template
·
C++
템플릿: 함수를 찍어내기 위한 형틀 일반화 프로그래밍일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 대하여 재사용하는 프로그래밍 기법 템플릿 함수모든 템플릿은 헤더컴파일 Xtemplate T get_max(T x, T y){ if(x > y) return; else return y;}특수화예외 템플릿 함수우선순위 높음template void increase(T& v) { v += 1; }// 템플릿 특수화template void increase(int *& v) { v += 2; }중복템플릿은 헤더이므로 아직 만들어지지 않았음만들어진 중복 함수가 있다면 해당 함수부터 부름template void increase(T& v) { v += 1; }// 템플릿 특수화template void incr..
[C++] Exceptions
·
C++
예외 처리try예외가 발생할 수 있는 블록throw예외를 던짐catchtry 블록에서 예외가 발생하면 처리try문 안에서 throw문을 수행하면 try문의 나머지 부분은 수행 안 됨, 이후 catch로 이동하여 수행 후 그 다음 코드 정상 수행try문 안에서 throw문이 수행되지 않으면 try문의 나머지 수행, 이후 catch로 이동하지 않고 남은 코드 정상 수행throw-catch에서 인자의 타입이 일치되는 예외만 처리단, char(1 byte)의 경우는 int(4 byte)에 넣을 수 있기 때문에 인자가 int 타입인 경우에도 예외 처리됨catch(…) 은 모든 타입의 예외를 처리할 수 있음어떤 함수에서 예외 발생 시, 함수 내부가 아닌 함수가 호출된 곳에서 예외 전파단, 함수 내부에서 예외 해결이..
[C++] Polymorphism
·
C++
다형성: 객체들의 타입이 다르면 같은 이름의 함수가 호출되더라도 서로 다른 동작을 하는 것하나의 코드로 다양한 타입의 객체를 처리하는 기술타입을 고려하지 않고 인스턴스 재활용 객체 간의 형변환상속 관계일 때 가능상향 형변환서브클래스의 타입을 수퍼클래스 타입으로 변환implicit하게 일어남// Shape이 수퍼클래스, Rectangle이 서브클래스Shape *ps = new Rectangle(); // 자동적 upcastingps->setOrigin(10, 10) // setOrigin은 Shape의 멤버 함수하향 형변환수퍼클래스 타입을 서브클래스 타입으로 변환implicit하게 일어나지 않음(명시적 형변환 연산자 사용해야 함)Shape *ps = new Rectangle();Rectangle *pr =..