본문 바로가기

프로그래밍

[effective STL] 항목 28 : reverse_iterator 쓸 때 base() 잘 쓰기 핵심insert나 erase 사용 시 인자로 결국 iterator를 사용하기 때문에reverse_iterator를 iterator로 변환해주어야한다.이때 insert는 상관 없지만 erase는 대응하는 iterator가 아닐 수 있다. 123456789 vector intVec; const int VECSIZE = 10; intVec.reserve(VECSIZE); for (size_t i = 0; i 더보기
[CMD] robocopy로 특정 파일 하위 폴더 유지하고 복사하기(+ 특정 폴더 제외) 상황 오늘 회사에서 작업을 하며 필요한 기능이 있었다. \\192.168.xx.xx\folder1\folder2\backup\folder3\folder4 이런 요망한 구조에서 folder2에 중요한 데이터가 있었다. 이 놈들을 data.dat라고 했을 때 문제는 backup에도 이 파일이 있다는 것. 한 마디로 folder2까지 데이터와 디렉토리 구조만 원하고 backup 이하는 복사하지 말아야 한다는 것! 일단 xcopy로 신나게 삽질을 하다가 지식인 https://c.aitl.in에게 도움을 요청했다. (역시 짱짱맨) 헬프 자 일단 /?를 해보자! C:\Users\Jo Minhyuk>robocopy /? ------------------------------------------------------.. 더보기
[effective STL] 항목 27 : const_iterator -> iterator는 distance와 advance를 사용하자. 핵심(우리가 해서는 안 될 짓)const_iterator와 iterator는 서로 다른 클래스이다.string과 complex의 관게보다도 멀다고 한다.한 마디로 캐스팅이 안 된다. 전혀 엉뚱한 클래스를 캐스팅하려 하지 말자. 해결(const_it -> it)과정1. 컨테이너의 첫 요소를 가리키는 iterator를 생성한다.2. const_iterator가 가리키는 곳 까지 iterator가 뛰면 끝! so simple!3. 거리 계산엔 distance와 점프엔 advance가 사용된다. 그럼 이렇게 하면 되는가?1advance(i, distance(it, constIt));cs안 된다고 하신다. distance의 선언문을 보자12template typename ierator_traits::differe.. 더보기
[Design Pattern] 싱글톤 제일 처음으로 사용해 본 디자인 패턴이다. 예전에 지인이 해놓은 피티를 보니꽤 내용을 잘 정리해놔서 옮겨 본다.싱글톤이야 지겹게 써봤지만 화룡점정을 찍는 정리. 출처 : https://c.aitl.in/ 홈피 관리자 머리 속에서 정리된 것을 정리한 피피티 싱글톤 패턴전략클래스가 유일한 인스턴스를 갖고, 그 인스턴스는 전역에서 액세스 할 수 있도록 한다.전역변수다! 손해멀티 스레딩에 시간 지연이 생긴다.전역에서 액세스 하기때문에 문제가 발생하면 모든 코드를 둘러봐야 한다.기능 단위 테스트나 변경을 위해 관련 구조만 뽑아내기 어렵다. 개이득단 하나의 인스턴스만 갖도록 강제한다.특정 인스턴스에 어디든 접근하여 자원을 사용할 수 있다. 전역변수다!다른 클래스의 공통 기능부를 통합해 관리할 수 있다. Basic .. 더보기
[.NET, C#] 비동기 네트워크 API 비동기 네트워크 메서드System.Net 네임스페이스에 System.Net.Sockets의 Socket 클래스에 정의되어 있다. MSDNhttps://msdn.microsoft.com/library/System.Net.Sockets.Socket_methods(v=vs.110).aspx AcceptAsync123public bool AcceptAsync( SocketAsyncEventArgs e) cs 클라이언트의 연결을 수락한다. ReceiveAsync123public bool ReceiveAsync( SocketAsyncEventArgs e)cs 메시지를 수신한다. SendAsync123public bool SendAsync( SocketAsyncEventArgs e)cs 메시지를 전송한다. Conne.. 더보기
[effective STL] 항목 26 : 여러 iterator 중 쓸만한 것은 결국 iterator 총 4개의 iterator를 제공한다. iterator, const_iterator, reverse_iterator, const_reverse_iterator 일종의 T*, const T*, 그리고 head 부터인지 tail 부터인지 차이다. iterator의 변환 관계는 다음과 같다. iterator가 좋은 이유 - 어떤 형태의 insert나 erase 멤버 함수는 무조건 iterator만을 넘겨야 한다. - const_iterator를 iterator로 암묵적 변환할 방법이 없다. 방법이 있지만 성능과 안정성이 보장되지 않는다. - reverse_iterator를 iterator로 변환할 수 있지만 변환 후 약간의 조정이 필요하다. const_iterator와 iterator를 동시에 사용할 시 팁 .. 더보기
[effective STL] 항목 24 : map에서 []나 insert는 효율 문제에 주의하자. 1234567891011class Widget {public: Widget(); Widget(double weight); Widget& operator=(double weight); ...}; ... map mW;cs double 값을 이용하여 widget을 초기화 할 수 있다. 이렇게 자료구조가 있을 때 두 가지 정도 작업이 있을 수 있다.1. map에 값을 넣으며 초기화.2. map에 들어가 있는 값을 변경하는 작업. 보통은 둘 다 이렇게 사용한다.1mW[1] = 1.50;cs map의 operator[] 연산자의 특징추가 아니면 갱신(add or update) 기능을 수행하도록 설계되어 있다. 1mW[k] = v;cs 키 값 k가 들어 있는지 점검 -> 그렇지 않다면 k와 v를 페어로 묶어 맵에 새.. 더보기
[effective STL] 항목 23 : 연관 컨테이너 대신 정렬된 벡터를 쓰는 것이 좋을 때도 있다. 일반적으로 빠른 데이터 검색을 지원하는 자료구조가 필요하면?바로 떠오르는 것은 연관 컨테이너다. 표준 연관 컨테이너는 전형적으로 균형 이진 탐색 트리로 되어있다.삽입, 삭제, 탐색이 아무 때나 이루어질 때 유리한 구조.But, 많은 프로그램들이 실제로 이런 극단적으로 혼란스러운 구조를 가지지 않는다. 대개 프로그램에서 자료구조를 사용하는 3단계1. Setup : 자로 구조를 만든다. 데이터 삽입과 삭제가 대부분이며 탐색은 거의 일어나지 않는다.2. Lookup : 셋업이 끝난 자료 구조 중 원하는 정보를 찾는다.3. Reorganize : 자료 구조의 내용물을 바꾼다. 1과 비슷한 일을 하며 작업이 끝나면 2로 진입한다. 이러한 프로그램이라면 벡터가 연관 컨테이너보다 훨씬 나은 수행성능을 제공할 가능성이.. 더보기