벡터를 복사하려고 할 때 어떤 함수를 쓸 수 있을까요? 벡터 v에 있는 내용을 그대로 u에 복사해 보겠습니다. 생성자를 이용한 방법 먼저 생각해 볼 수 있습니다. 이 문서에 나온 방법 중 하나를 써 보았습니다. 벡터 v 전체를 넘겼는데요. 이것은 v 전체를 u에 복사한다는 의미입니다. 문서에 따르면 이것을 copy constructor라고 합니다. 제대로 복사가 되었음을 알 수 있습니다. 문제는, 생성자는 새로운 벡터를 생성하는 것입니다. 생성과 복사는 미묘하게 다릅니다. 기존의 벡터에다가 다른 벡터에 저장이 되어 있는 값들을 복사할 수는 없을까요? 이 때 쓸 수 있는 것은, algorithm 헤더에 있는 copy 메서드입니다. 문서에 따르면, 아래와 같이 쓸 수 있다고 합니다. 예제를 2개만 해 보도록..
C++ 검색 결과
처음 백준을 하시다 보면, 출력하실 때, 개행을 출력하기 위해서 endl을 많이 쓰는 실수를 합니다. 이게 어떤 문제가 있는지 공식 문서를 하나 하나 해석해 보면서 알아보겠습니다. 먼저 링크를 보시면 아래 문구가 눈에 보입니다. 개행을 stream에 insert를 한 다음에, stream을 flush 한다고 해석할 수 있습니다. 그러면, 이게 얼마나 시간을 많이 먹는 작업일까요? 간단하게 테스트 프로그램을 하나 만들어 보겠습니다. 123이라는 문자열을 2000만번 출력하는 프로그램입니다. 그리고, 이 작업을 하기 전에 시간을, 한 후에 시간을 출력함을 알 수 있는데요. 간단하게 시간을 측정하기 위해서, 이 방법도 나름 쓸만합니다. 저는 ex를 실행시켜서 출력된 결과를 1.txt에 넣겠습니다. 그리고, 1..
안녕하세요. chogahui05입니다. ps를 하시다 보면, 테스트 케이스 문제를 많이 보셨을 겁니다. 보통, vector를 클리어 할 때, clear 메소드를 많이 이용하고요. 여기서 한 가지 질문. clear 메소드는 정말 vector가 할당했던 모든 것을 깔끔하게 clear 할까요? 답은 그렇다는 보장이 없다입니다. 링크에서, reallocation is not granteed 라는 문구를 보시면 알 수 있습니다. 다음 코드를 보도록 하겠습니다. v에 5개의 원소를 넣습니다. 그리고 size와 capacity를 출력합니다. 다음에 vector의 clear 메서드를 호출한 다음에 다시, size와 용량을 출력해 주는 capacity를 출력합니다. 결과 값을 보면, 1번째 줄에는 5와 8이, 2번째 줄..
예전에 vector가 인자로 들어왔을 때, 어떻게 해야 되는지를 올렸습니다. 어느 분이 댓글로 피드백을 주셨습니다. 그 내용에 관해서 보강 설명을 하도록 하겠습니다. 사실 동적 배열에서 중요한 것은 딱 3개입니다. capacity, size. 그리고 grow rate. ps를 하시다 보면, vector의 reserve와 resize 함수를 써야 하는 경우가 있습니다. 어떤 경우인지는 밑에서 설명해 드리도록 하겠습니다. 동적 배열의 기본 동작 먼저 설명해 드리겠습니다. 먼저, 4개의 원소를 저장할 수 있는 공간에 3개의 원소가 있다고 해 봅시다. 이 경우에, capacity는 4이고, size는 3입니다. 이걸 그림으로 나타내면 아래와 같습니다. 여기서, push_back(3)이 호출되면 어떤가요? 이 때..
질문이 하나 들어왔습니다. 아래에 있는 foo 함수의 시간 복잡도는 어떻게 되나요? 쉽지 않은 질문입니다. c++에서 map이나 set은 self balanced binary Tree로 되어 있습니다. 흔히 '균형 트리' 라고 이야기를 합니다. 중요한 것은 어느 기준 점을 기준으로 왼쪽은 작은 것이, 오른쪽은 큰 것이 저장이 되어 있다는 것입니다. set이나 map이 Binary Tree의 속성을 가진다는 것은 시간 복잡도를 계산하는 데 굉장히 중요한 정보입니다. 즉, root를 기준으로 작은 것은 L, 큰 것은 R 부분에 있습니다. 그렇다면, iterator를, s.begin()부터, s.end()에 도달할 때 까지, 순회한다고 생각해 봅시다. 즉, 작은 것부터 큰 순서대로 순회를 한다고 하면 어떻게 ..
최근댓글