본문 바로가기

C++87

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.
C++ 기초 : iterator (1) vector 클래스 내부에도 iterator 클래스가 구현되어 있습니다. 아래 코드에서 23번째 줄을 보시면vector의 int 버전 클래스 내부에 있는iterator 클래스를 통해 객체 veciter를 만들었습니다. 그리고 veciter에 vecInt가 가리키는 가변 배열의주솟값을 대입했죠. veciter가 가리키는 공간에* 연산을 통해 100을 대입할 수 있습니다. vecInt가 가리키는 가변 배열의 주솟값이저장된 veciter에 바로 * 연산을 통해 100을 대입하면 가변 배열의 0번째 인덱스에100이 대입될 것입니다. 0번째 인덱스가 아닌1번째 인덱스에 100을 넣고 싶다면 ++veciter 코드를 추가한 후 대입하면 됩니다. veciter는 0번째 .. 2024. 4. 20.
C++ 기초 : STL (vector와 list) 가변 배열을 직접 구현했었지만,사실 표준 라이브러리에서 제공하는 가변 배열이 있습니다. 밑에 코드를 보시면 2번째 줄에서 "vector"를 포함시켜서 사용할 수 있습니다. vector는 클래스 템플릿이기 때문에 어떤 자료형을 관리하는 클래스를 만들 것인지자료형을 명시해 줘야 합니다.  그리고 std라는 namespace에 존재하기 때문에범위 지정 연산자를 통해 std를 붙여줘야 하죠.계속 붙여야 하는 것이 번거롭다면 main 함수 밖에using std::vector; 코드를 추가하면 바로 사용할 수 있죠.  클래스 템플릿을 이용하여 vector라는 클래스를 만들고 이를 통해 객체 vecInt를 만들었습니다.  8 ~ 9번째 줄을 보면 데이터를 삽입하는 함수,pu.. 2024. 4. 20.