이전에 저는 2개의 필드를 가지는 구조체를 custom 하게 정렬하거나 비교할 때, < 연산자를 구현한 적이 많았습니다. 예전에 제가 ps를 할 때는 그랬습니다. 생각이 바뀐 것은 python의 tuple을 맛보고 난 후였습니다. c++에도 tuple이 있는데요. 백준에서 문제를 풀기 위해 이 정도만 알아도 되겠다 싶은 것들만 작성해 보겠습니다. tuple을 다룰 때에는 3가지만 알면 됩니다. i번째 필드 얻어 오기, i번째 필드 바꾸기, 새로 생성하기. 이 2가지를 먼저 알려드린 다음에 프로세스와 가희 문제에서 어떻게 적용될 수 있는지 보여드리겠습니다. 예제를 보면서 이해해 보도록 하겠습니다. 먼저, 새로 생성하는 것은 make_tuple로 하시면 됩니다. 8번째 줄을 수행하면, 대략적으로 요래 올라갈..
STL 검색 결과
c++ STL에서 fill을 어떻게 쓰는지 예제로 알아봅시다. 이것은 공식 문서에 따르면, forward 이터레이터 2개가 필요합니다. 그리고 해당 이터레이터는 이 문서에 설명이 자세히 되어 있습니다. 그런데 보통, 저는 배열이나 벡터 등에서 많이 썼습니다. 그 외 다른 경우에는 쓴 적이 없었습니다. 그러니, 이 자료구조에서 어떻게 fill 함수를 쓰는지를 중점적으로 설명하겠습니다. 예제 1번입니다. int 벡터 배열 v가 선언되어 있습니다. 여기에 들어있는 내용 전체를 0으로 초기화 하려고 합니다. 16번째 줄에 보면, v.begin() 부터, v.end()까지를 범위로 주었습니다. 이는 v의 시작과, 끝을 의미합니다. 이것을 어떠한 값으로 초기화를 시킬 건데요. 3번째 인자에 0이 들어갔음을 볼 수 ..
벡터를 복사하려고 할 때 어떤 함수를 쓸 수 있을까요? 벡터 v에 있는 내용을 그대로 u에 복사해 보겠습니다. 생성자를 이용한 방법 먼저 생각해 볼 수 있습니다. 이 문서에 나온 방법 중 하나를 써 보았습니다. 벡터 v 전체를 넘겼는데요. 이것은 v 전체를 u에 복사한다는 의미입니다. 문서에 따르면 이것을 copy constructor라고 합니다. 제대로 복사가 되었음을 알 수 있습니다. 문제는, 생성자는 새로운 벡터를 생성하는 것입니다. 생성과 복사는 미묘하게 다릅니다. 기존의 벡터에다가 다른 벡터에 저장이 되어 있는 값들을 복사할 수는 없을까요? 이 때 쓸 수 있는 것은, algorithm 헤더에 있는 copy 메서드입니다. 문서에 따르면, 아래와 같이 쓸 수 있다고 합니다. 예제를 2개만 해 보도록..
예전에 vector가 인자로 들어왔을 때, 어떻게 해야 되는지를 올렸습니다. 어느 분이 댓글로 피드백을 주셨습니다. 그 내용에 관해서 보강 설명을 하도록 하겠습니다. 사실 동적 배열에서 중요한 것은 딱 3개입니다. capacity, size. 그리고 grow rate. ps를 하시다 보면, vector의 reserve와 resize 함수를 써야 하는 경우가 있습니다. 어떤 경우인지는 밑에서 설명해 드리도록 하겠습니다. 동적 배열의 기본 동작 먼저 설명해 드리겠습니다. 먼저, 4개의 원소를 저장할 수 있는 공간에 3개의 원소가 있다고 해 봅시다. 이 경우에, capacity는 4이고, size는 3입니다. 이걸 그림으로 나타내면 아래와 같습니다. 여기서, push_back(3)이 호출되면 어떤가요? 이 때..
STL을 공부하시다 보면, 반복자 무효화라는 용어는 한 번 쯤 들어보셨으리라 생각합니다. 반복자는 순회, 탐색 등을 위해서 쓰는 녀석인데요. 이것이 어떠한 이유로 무효화가 될 수 있습니다. 보통, iterator가 가리키는 것이 삭제 되었을 때 무효화가 되는데요. vector와 같이, 동적 배열을 사용할 때는 그 이외에도 조심해야 할 부분들이 몇 가지 더 있어요. 예제 프로그램 1을 봅시다. 먼저, 이 프로그램을 생각해 봅시다. vector v에 원소를 200개 추가했습니다. 그리고, 이 때, 벡터의 시작 원소를 iter가 가리키게 했습니다. 그리고 난 다음에, v에다가 0부터 1999까지 또 추가를 합니다. 프로그램에는, 벡터에 remove 연산을 가하지 않았습니다. 그런데 결과가 의외입니다. 0 0 ..
최근댓글