이전에 저는 2개의 필드를 가지는 구조체를 custom 하게 정렬하거나 비교할 때, < 연산자를 구현한 적이 많았습니다. 예전에 제가 ps를 할 때는 그랬습니다. 생각이 바뀐 것은 python의 tuple을 맛보고 난 후였습니다. c++에도 tuple이 있는데요. 백준에서 문제를 풀기 위해 이 정도만 알아도 되겠다 싶은 것들만 작성해 보겠습니다. tuple을 다룰 때에는 3가지만 알면 됩니다. i번째 필드 얻어 오기, i번째 필드 바꾸기, 새로 생성하기. 이 2가지를 먼저 알려드린 다음에 프로세스와 가희 문제에서 어떻게 적용될 수 있는지 보여드리겠습니다. 예제를 보면서 이해해 보도록 하겠습니다. 먼저, 새로 생성하는 것은 make_tuple로 하시면 됩니다. 8번째 줄을 수행하면, 대략적으로 요래 올라갈..
C++ 검색 결과
c에서 multiple token을 처리하기 위해서 strtok을 이용할 수 있습니다. 자바는 split 로 매우 간단하게 처리할 수 있습니다. 그리고 이 메서드는 정규 표현식을 이용합니다. c++에서는 어떻게 하면 좋을까요? 자바의 split가 정규 표현식을 쓴다는 것에 착안하시면 무엇을 써야 할 지 쉽게 알 수 있습니다. 문자열 s를 ,과 .를 구분자로 나누는 예제를 생각해 보겠습니다. 먼저, delimeter는 . 아니면 ,입니다. 따라서, 이를 정규 표현식으로 표현하면 [.,]입니다. 이것은 scan 집합이 . 아니면 ,라는 의미입니다. 그런데, 이들이 한 번 이상 나오면 어떨까요? 예를 들어, 문자열 ",,"이나, "..,"는 어떤가요? 이런 경우도 match가 되게 하려면 regex의 패턴이 ..
c++에서 string을 처리할 때, 구분자가 여러 개 붙어 있는 경우 split를 어떻게 할까요? c의 string.h에서는 strtok으로 된다고 하는데. 한 가지 방법 중 하나는, 문자열을 순회하면서, 해당 문자가 구분자인지 검사하는 것입니다. 제 목표는 token_ret 메서드를 구현하는 것입니다. 2번째 인자는 delimiter들을 넘깁니다. 쉽게 말해 구분자인데요. :과 -와 공백을 넘겼습니다. 이들을 기준으로 split 하겠다는 의미입니다. 실행 결과는 위와 같이 나와야 해요. 인풋이 이렇다고 해 봅시다. 양 끝단 처리가 어려울 듯 하니, 더미 2개를 넣읍시다. 하나는 문자열 시작 위치 바로 전인 -1, 다른 하나는 문자열의 끝인 size of string length를 넣을 겁니다. 이 둘..
string을 int로 바꿀 수 없을까요? c_str로 raw pointer를 리턴받고, atoi에 raw_pointer를 넘겨주면 됩니다. 사실 저는 stoi를 알기 전까지 이렇게 했습니다. 예제 프로그램을 보도록 하겠습니다. 저는 string "123"을 정수 123으로 바꾸고 싶습니다. 그렇게 하려고 s.c_str()의 리턴값을 atoi에 넣었습니다. 그러면, 실제 "123"을 들고 있는 위치인 p를 atoi에 넣게 됩니다. atoi는 이 위치부터 NULL이나, '0', ... '9'가 아닌 다른 것을 만날 때 까지 읽게 될 겁니다. 문자열에 대충 이래 저장이 되어 있다고 하면, '1'을 읽고 '2'를 읽고 '3'을 읽고 난 후에 숫자가 아닌 문자가 있으니, break를 걸 겁니다. 따라서, 이 때..
c++ STL에서 fill을 어떻게 쓰는지 예제로 알아봅시다. 이것은 공식 문서에 따르면, forward 이터레이터 2개가 필요합니다. 그리고 해당 이터레이터는 이 문서에 설명이 자세히 되어 있습니다. 그런데 보통, 저는 배열이나 벡터 등에서 많이 썼습니다. 그 외 다른 경우에는 쓴 적이 없었습니다. 그러니, 이 자료구조에서 어떻게 fill 함수를 쓰는지를 중점적으로 설명하겠습니다. 예제 1번입니다. int 벡터 배열 v가 선언되어 있습니다. 여기에 들어있는 내용 전체를 0으로 초기화 하려고 합니다. 16번째 줄에 보면, v.begin() 부터, v.end()까지를 범위로 주었습니다. 이는 v의 시작과, 끝을 의미합니다. 이것을 어떠한 값으로 초기화를 시킬 건데요. 3번째 인자에 0이 들어갔음을 볼 수 ..
최근댓글