전체 글131 C++ 기초 : erase (2) erase 함수를 구체적으로 작성하겠습니다. 아래 코드를 보시죠. 235번째 줄 if 문에 조건이 하나 더 추가되었습니다. vector의 데이터 개수를 나타내는멤버 m_iCount의 값보다 iterator의 인덱스 값이 크거나 같을 때도오류 창이 출력됩니다. 만약 vector의 데이터 개수가 3개인데 3번째 인덱스 또는 그 이상의 인덱스에 접근하면 오류로 인지하는 거죠. 242 ~ 247번째 줄은 vector의 데이터가 복사되는 과정입니다.빈 공간이 생기면 뒤에 있는 데이터로 빈 공간을 채워 주는 거죠. 여기서 생각을 조금 해 보면,만약 3개의 데이터가 있고 0번째 인덱스 공간을 제거했습니다.그러면 1번째 인덱스의 값이 0번째 인덱스로 복사되고,2번째 인덱스의 값이 1.. 2024. 4. 24. C++ 기초 : erase (1) 이제 erase 함수를 구현해 볼 건데erase 함수가 어떤 역할을 하는지 알아야겠죠? 아래 코드를 보시면 표준 라이브러리에서 제공하는 vector를 통해 가변 배열을 만들었고 해당 가변 배열에는 10과 20이 차례대로 들어 있습니다. 그리고 10이 있는 공간을 iteraor를 통해가리키고 있죠. vector의 멤버 함수 erase를 통해iterator가 가리키는 공간을 제거합니다.즉 첫 번째 공간을 제거하는 것이죠. 가변 배열은 중간에 빈 공간을 두면안됩니다. 그래서 첫 번째 공간을 다음 데이터가 메꾸게 되죠. 위 같은 경우에는 10이 제거되어 첫 번째 공간을20으로 메꾸게 되겠죠. 그러면 iterator는 자연스럽게 20을 가리키게 되겠고iterator.. 2024. 4. 24. C++ 기초 : iterator (5) 후위 ++ 연산자를 오버로딩하겠습니다. 후위처럼 작동하게 하려면우선 함수 내에 지역 변수를 하나 만들어야 합니다. iterator형 지역 변수를 하나 만든 후,해당 연산자를 호출한 iterator의 값을 통해 초기화합니다. 해당 연산자를 호출한 iterator의 값을 하나 올린 후지역 변수를 반환합니다. 이렇게 되면 연산자는 iterator의 값을 올리기 전에 반환하고연산자를 호출한 iterator는 다음 데이터를 가리키게 되겠죠. 실행 결과를 보니 a1에는 myiter가 가리키고 있던 공간의 값을 저장한 후myiter에 ++ 연산이 진행되면서a2에는 myiter가 가리키던 공간으로부터 다음 공간의 값을저장하고 있음을 확인할 수 있습니다. .. 2024. 4. 22. C++ 기초 : iterator (4) iterator에 ++ 연산자를 할 수 있도록연산자 오버로딩을 하겠습니다. 전위 기준으로 작성하겠습니다. 일단 예외 처리부터 하였습니다. 52번째 줄은 가변 배열에 데이터가 존재하지 않거나,또는 가변 배열이 새로운 공간에 할당되면서 기존의 공간이사라졌을 때 오류를 출력하도록 되어 있습니다. 가변 배열에 데이터가 없을 때 iterator의 멤버 idx의 값을 -1로 하였고 vector가 갖고 있는 가변 배열의 시작 주솟값과iterator가 갖고 있는 가변 배열의 시작 주솟값이 다른 경우 오류를 출력한다고 볼 수 있네요. 56번째 줄은vector의 iCount 값을 반환하는 size 함수를 이용한 것인데요.iCount는 가변 배열 속 데이터의 개수를 나타냅니다.해당 개수.. 2024. 4. 22. C++ 기초 : iterator (3) 직접 구현한 vector(가변 배열) 역할을 하는 클래스 cArr의 inner 클래스 iterator가 역참조(*) 연산을할 수 있도록 연산자 오버로딩을 진행하겠습니다. 해당 작업을 위해선 우선 iterator 클래스의 멤버를 수정할 필요가 있습니다. iterator는 가변 배열의 시작 주솟값을 갖고 있습니다.근데 가변 배열은 데이터 삽입 과정에서 공간이 가득 차면새로운 공간을 할당한 후 기존 데이터를 복사하고기존 데이터가 있던 공간을 해제하죠? 즉 공간이 가득 차서 새로운 공간이 할당되면iterator가 갖고 있는 가변 배열의 주솟값이 유효하지 않다는 거죠. 여기서 생각해 볼 수 있는 것은iterator의 멤버 m_pData가 가변 배열의 시작 주솟값을저장하고 .. 2024. 4. 22. C++ 기초 : iterator (2) iterator도 직접 구현을 해 보겠습니다. 표준 라이브러리에서 제공하는 iterator는클래스 안에 존재하는 inner 클래스였죠? vector(가변 배열)와 같은 기능을 하는클래스 템플릿을 작성한 cArr.h 파일로 가서inner 클래스 iterator를 작성하겠습니다. cArr.h에 클래스 iterator를 추가했습니다. long long형 멤버 m_ll가 있습니다. 이때 64Bit 환경에서 클래스 cArr의 크기는 몇 Byte일까요?cArr의 멤버는 포인터 하나와 int형 멤버 두 개가 있네요.포인터는 환경 크기와 같으므로 64Bit 환경에서 8Byte입니다.여기에 int가 두 개이므로 8 + 4 + 4 = 16Byte입니다. 여기에 iterator 클.. 2024. 4. 20. 이전 1 ··· 9 10 11 12 13 14 15 ··· 22 다음