엄범

Dynamic programming, 기억하며 풀기

DP를 번역하면 동적 계획법 이지만 책 “컴퓨터 과학이 여는 세계”에서는 다이나믹 프로그래밍을 본질적인 의미를 더 살려서 기억하며 풀기 로 더욱 적절하게 번역하였다. 즉, 이전에 구한 작은 부분 문제의 답을, 다음 문제를 푸는데 이용하는 문제 해결 방식.이전 답을 재활용 하면서 더 큰 문제를 해결하는 방식 이다. 피보나치 수열 구하기(그냥 일반항에...

(C++) 생성자에서 throw하면(exception) 객체가 없어질까? / thread는 start() 함수로?

결론부터 말하자면 없어진다. 함수들이 전후 호출 순서 종속성이 생기는 경우 생성자에서 처리하는게 깔끔하다. 생성자에서 처리 안하고 f1()호출하고 c f2()호출하는 식이면, 이 호출 순서를 강제할 수 없으니 c f2()에서 내부에 종속성 변수가 NULL인지와 같이 잘 초기화되었는지 체크해주는 루틴이 들어가 줘야 한다. 생성자는 리턴이 안되니 ex...

(C++) lambda (bind 보다는 lambda를 쓰자)

lambda가 왜 필요하냐면, 함수 포인터는 함수이기 때문에 상태를 가질 수 없다. 반복문 같은데 인자로 함수를 넘겨야 하는 상황에서 그 함수가 상태를 가져야 하는 경우, 함수 포인터를 사용할 수 없다. 따라서 상태를 가지는 함수를 만들기 위해서 함수 객체라는 트릭을 사용해야 했다. 함수 객체는 객체인데, operator()를 오버로드해서 함수처럼 호...

(C++) 컨테이너 안에 클래스가 들어있을 때, 클래스 안의 멤버들을 순회하는 이터레이터를 반환받는 방법 + mem\_fn

vector<cls>가 있을 때, cls.value들만 뽑아내고 싶은 경우가 빈번하게 있다. 일반적인 경우 그냥 반복문 돌면서 처리해주면 되지만, 라이브러리 등을 사용할 때는 반드시 cls.value로 이루어진 iterator를 넘겨야만 하는 경우가 있다. 이런 경우 처음으로 드는 생각은 함수형의 filter()인데, 이는 copy가 발생...