cpp(stl) 11

cpp11 역방향반복자

역방향 반복자...Reverse_Iterator: ++해도.. 뒤로 가게 해주는(사기를 치는) 반복자왜 쓰는데?기존 for문법을 그대로 쓰면서 거꾸로 순회가 가능..void operator++() { --p; };로 만들어서.. 보이기엔 ++i 이지만.. 실제로는 뒤로 간다!!왜냐면 s.rbegin()은 s.end()랑 똑같기에... 뒤로 가야하는데 for문법에서 begin()부터 end()로 가는데.. --을 쓴다?뭔가 이상하잖아..보기에..그러니까 사기를 치는거임.reverse_iterator로.. 보이기엔 ++이지만 사실은 --로 뒤로가는... 거꾸로 순회가 가능하게 하는 반복자.. char& operator*() const { return *(p-1); };지금 역방향 반복자에서..왜 *(p-1)..

cpp(stl) 2025.05.25

cpp10 STRING객체(복사/이동)/push_back/emplace_back

STRING( const STRING& other )복사생성자 : 객체를 새로 만들 때, 복사를 이용해! (깊은 복사를 한다..)다른 객체와 똑같은 내용으로... 새로운 객체를 만드는 것.other.p의 내용을 새로운 p에다가 복사해주는 것.보다시피..STRING s2 = s1;이게 복사 생성자로 s2를 만들어 준것.. STRING& operator= ( const STRING& other ): 복사 할당 (복사 대입)이미 있는 객체에.. 복사 대입할 때 이미 존재하는 a에 대해, b의 내용을 복사하는 것..p.release()로 기존 자원을 해제한다.. make_unique로 새 메모리를 할당 후, memcpy를 통해 내용 복사!실제 호출은 이런 식으로..STRING(STRING&& other): 이동..

cpp(stl) 2025.05.24

cpp9 STRING객체/list/vector/deque

이렇게 하면...임시객체로 만들어 갖다 붙이는 거기에 실제로는 6,7,8번..에 이렇게 만들어진다고함.관찰로 돌려보니 진짜로 그렇게 됐다. 근데 왜??임시객체를 만들어 갖다붙인다는게 이해가 안돼서..찾아보았당일단 std::list?양방향 연결구조를 가진 자료노드 기반 자료구조.. vector나 array처럼 연속된 메모리 공간에 저장되지 않는다!! => contiguous하지 않은 memory따라서 임의 접근이 불가능... [ ]또는 at사용이 불가능하다... list[3] 이런식의 접근이 안됨.반복자를 통해 이동이 가능하다.. iterator참고로 반복자는 한칸씩 밖에 이동가능함. 그럼 장점이 뭐있는겨?리스트의 경우.. 원소를 추가하거나 제거하는 작업이 O(1)로 매우 빠르다vector는 O(n)이 ..

cpp(stl) 2025.05.23

cpp8(callable)

250401 5w1 수업 정리Callble Type다시.. callable은?! 함수처럼.. ()를 붙여서 호출할 수 있는 아기들을 말한다..1.함수2.함수포인터3.람다4.함수객체 - 함수호출연산자를 오버로딩한 클래스로 만든 객체5.멤버함수전에 람다..?까지 다뤘던 것 같은데 이번에는 함수객체(함수호출연산자)와 멤버함수에 대해 다뤄보겠다.. 아 .. 술먹고싶다.. 일단 함수호출연산자는... () () 이 괄호 두짝은 함수를 부르는 연산자임우리는 ()이 연산자도 operator()로 오버로딩해서 사용해줄 수 있다..원래 클래스 객체는 ()를 지원해주지 않는다.. 그래서 직접 operator()를 오버로딩해주는 것..왜 사용하는데?!객체를 함수처럼 사용하고 싶을때.... (이게 함수객체임!!! functio..

cpp(stl) 2025.04.11

cpp7(함수포인터/collable/람다) 4w2

250327 수업정리..(4w2) Callable Types호출 가능한 타입..함수처럼 호출()할 수 있는 모~~든 것을 callable 이라고 함.1. 함수 : 이름 있는 함수2. 함수 포인터 : 함수 주소를 가리키는 포인터3. 람다[] lambda : 이름 없는 즉석 함수이것들 모두 () 연산자로 호출할 수 있기에.. callbale type 이라고 함 void*이건.. 어떤 타입이든 가리킬 수 있는 일반적인 포인터임!!!이건 함수 포인터가 아님... 그냥 타입이 없는 포인터!!!!!이런식으로... int값을 반환하는 내림차순()이라는 함수안에 매개변수로cosnt void* a, const void* b 가 들어가있음.여기서 void*는 void라는 함수를 가리키는게 아니라... 저 void*는 어떠..

cpp(stl) 2025.04.11

cpp6(RAII/throw/unique_ptr) 4w1

밀린 공부...4w1 RAII (Resource Acquisition Is Initialization)└ 자원의 할당과 해제를 객체의 생명주기와 일치시키는 기법- 우리는 자원의 해제(delete)를 직접 해줄필요가 없음! 이거는 스마트포인터로 구현이 된다..- 생성자에서 자원을 획득하고, 소멸자에서 자원을 반환하는 패턴..! throwthrow는.. 예외가 생기면 throw가 실행되는것? vs throw가 예외를 만드는 것?정답은.. throw는 예외를 만 드 는 아이! throw가 실행되면, 예외가 발생하는 것임..근데 왜 굳이 예외를 .. 발생시키지?코드를 진행하면서.. 더이상 정상적인 흐름으로 처리할 수 없는 상황에서 프로그램을 비상탈출하려고!throw를 던지면.. catch가 잡아준다. try내에..

cpp(stl) 2025.04.08

cpp5(stream_iterator/vector로 파일읽기/structured binding/연산자오버로딩)

250320 수업 + 모르는 이것저것 폰트랑 글자 크기 다 설정해놓고 막상 올리면 자꾸 초기화됨..너무짜증남..왜이래요티스토리ㅡㅡ 메모리영역 메모리가 어디에 들어가야할지..->이건 os가 정함.크게 Data, Stack, free-store 가 있다.먼저 Data영역(Static)└ 프로그램이 실행될 때, 초기화된 전역변수와 정적변수가 저장되는 공간.프로그램이 종료될 때 까지 이 데이터는 유지된다!int a = 10;   => 전역변수static int b = 5; => 정적변수 Stack영역└ 함수 호출 시 생성되는 지역변수, 매개변수가 저장되는 공간.LIFO구조로.. 함수 호출/리턴에 따라 자동으로 메모리 할당과 해제가 일어남.stack은.. 메모리 한계를 초과하면 스택 오버플로우가 발생한다!!! f..

cpp(stl) 2025.03.27

cpp4(파일입출력/바이너리모드/저수준출력)

250318 수업 정리본 + 모르는 것.. 시작하기에 앞서.. 제일 중요한 개념..연속성에 관하여 두 단어를 꼭 기억해야함continuous : 시간의 연속성contiguous : 공간의 연속성교수님께서 정말 아주아주 강조하셨다..지난학기 cpp할때 너무 잘알고있었는뎋 분명. 한번 더 까먹으면 큰일날듯copystd::array hello{};는 지난 글에서 다뤘으니.. (안전배열) 까먹으면 다시 그걸 보도록 하자..우리 array는 빈틈없이 메모리가 연속되어있음. 이걸 contiguous한 메모리라고 한다!!아 참고로...sizeof(hello)는, 바이트수를 반환 (여기서는 4000바이트)hello.size()는 원소의 개수를 반환 (여기서는 1000개) std::copy() 가 무엇이냐..└ STL의..

cpp(stl) 2025.03.19

cpp3(안전배열/file입출력)

250313 수업정리본 + 모르는 것.. *이건 그냥 내가 자주 까먹는 개념.. 인스터스(instancing)한다.. : 객체를 생성해 메모리를 할당한다.예를 들어.. Dog 라는 클래스를 만들고, dog라는 인스턴스를 만듬.메모리가 할당되는 시점은.. 인스턴스가 될 때, 객체가 생성이 될 때! virtual : 순수 가상 함수.. 상속과 관련된 개념! 이걸 통해 다형성(polymorphism)을 구현할 수 있음!다형성 : 같은 이름으로 다른 기능을 하게 하는 것override : 오버라이딩, virtual이랑 짝이라고 생각하자.. 부모 클래스의 함수를 자식클래스에서 재정의하는 것을 말함.* 랜덤엔진 std::default_random_engine dre{} -> 기본 랜덤엔진 사용. std::rando..

cpp(stl) 2025.03.19

cpp2(template-1)

template 템플릿ㅇㅔ 관해.. 아마두 stl // 템플릿..  (Generic Programming의 핵심이 됨..)// └ 코드의 재사용성을 높이고, 다양한 타입을 처리할 수 있도로 하는 기능. // 함수나 클래스를 쓸 때, 특정 타입에 고정되지 않고 일반화할 수 있음 // *타입이 지원하는 연산에 따라 사용이 제한될 수는 있다! // 약간 틀 같은..? 원하는 자료형에 맞춰 코드가 딱딱 튀어나오는 틀 같다고 생각할 수 있다 // 이러한 작업을 cpp의 template로 구현 가능 // template의 뜻을 어떠한 물건을 찍어내는 틀이라고 생각하면 됨. // 내가 원하는 타입을 넣어주면 딱딱 알아서 코드를 찍어내는 틀! 이라고 생각하자.. 이런식으로.. change() 라는 2개의 함수가 있을 ..

cpp(stl) 2025.03.12