경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 20220621 2022/04/04~2022/12/13

Jinho Lee·2022년 6월 21일
0

경일 메타버스 20220621 12주차 2일 수업내용. 자료구조와 알고리즘, 오답노트

  • 반복자(Iterator)의 이점 :
    컨테이너나 컬렉션(데이터의 모음)의 원소에 접근하려고 할 때 일관된 인터페이스를 가질 수 있다는 것.
// 반복자 있음
for (const_iterator iter = other.begin(); iter != other.end(); ++iter)
{
	// ++iter 처럼 연산으로 처리할 수 있다.
}

// 반복자 없음
for (const ForwardList::Node* node = other.begin(); node != other.end(); node = node->Next)
{
	// 다음 요소로 갈 때마다 node->Next로 다음을 지정해주어야 한다.
    // 여기서는 생략되어 있지만, Next가 nullptr을 가리킬 위험도 있다.
}
  • nullptr; // C++ 11부터 나온 널 포인터

    • 왜 나왔냐면 NULL의 모호함 때문.

    • NULL은 정수로서의 0도 되고 포인터로서의 NULL도 되기 때문에 문제가 많았다.

    • 포인터로서의 NULL => nullptr

    • nullptr의 타입 => nullptr_t
      ㄴ nullptr인 포인터 객체의 타입은 nullptr_t라는 뜻

오답노트 : 백준 1406 에디터
std::vector, std::list 등 리스트의 메소드 erase()insert()는 그 반환 타입이 iterator이며, 그 이유는 리스트를 변형한 이후의 iterator의 위치를 지정해야 하기 때문이다.
다만, insert()의 경우 삽입한 그 위치값을 그대로 갖고 있어, 다시 판단이 가능하기에 받지 않아도 된다.
그에 비해 erase()는 삭제되는 iterator를 그대로 가지고 있을 경우가 있기에, 반드시 반환값을 받아야 한다.
따라서 사용할 때마다 iterator를 받아주어야 한다.

오답노트 : 백준 5397 키로거
VS 같은 Window 환경에서는 문제가 없었지만, 리눅스 환경에서는 오류가 난다. 리터럴 문자에 대한 접근 문제
https://blog.naver.com/burningminor/222568212272

자료

https://docs.google.com/document/d/1wUms27Vj8si-jEjfRQJwSvsQ2CJNCv4IU6GOtesY4TE/edit

std::forward_list 구현

2022. 06. 21 단일 연결 리스트 std::forward_list 구현 : 헤더 파일

2022. 06. 21 단일 연결 리스트 std::forward_list 구현 : 소스 파일

std::list 구현

std::list는 이중 연결 리스트 중에서도 원형으로 순환하는
이중 원형 연결 리스트이다.

다만, 이대로 하면 끝과 시작이 불분명하기에 약간의 변형을 가하여
더미 노드 _end를 넣는다.

그 뒤를 시작(begin())으로, 그 앞을 끝(end())으로 잡으면
끝과 시작이 분명하고, 시작을 갱신할 필요도 없어져 구현이 매우 편리해진다.

또한, _head의 시작 더미 노드가 있다면 예외 처리가 많아지기에,
원형으로 하여 예외 처리를 피한다.

2022. 06. 21 이중 원형 연결 리스트 std::list 구현 : 헤더 파일

2022. 06. 21 이중 원형 연결 리스트 std::list 구현 : 소스 파일

  • 팁 : 바로가기 생성, 경로 : shutdown -s -t 0 로 설정 -> 빠른 시스템종료

0개의 댓글