분류 전체보기
-
야간 전술보행 C++알고리즘/프로그래머스(PRPGRAMMERS) 2022. 11. 3. 02:51
https://school.programmers.co.kr/learn/courses/30/lessons/133501?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 전쟁에 참여한 화랑이는 적군의 기지에 침투하여 정보를 훔쳐오는 임무를 받았습니다. 화랑이는 야간 전술 보행을 이용하여 직진하며, 야간 전술 보행은 1m/s의 일정한 속도로 나아갈 수 있습니다. 화랑이의 침입 경로에는 경비병들이 각자 일부 구간들을 감시하고 있습니다. 각각의 경비병들이 감시하는 구간은 서로 겹치지 않으며, 일정 시간 동안 근무 후 일정 시간 동안 휴식을..
-
왜 c에는 이동 연산자가 없는가.뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 3. 01:23
이동 의미론(move semantic)을 사용하다가 문득 든 생각은 왜 C에는 이동연산자가 없을까? 하는 질문이 생각났습니다. 나름대로의 해답을 도출했는데, stackOverflow에서도 비슷한 질문을 한 경우가 있어, 첨언하여 답변해보겠습니다. 우선 C++에서 "move semantic"은 임시 객체에 대해서 효율적인 이동이 가능하도록 하는 오버로딩 방법중 하나입니다. - 이를 생각해보지 못했는데, 이동 연산자 또한 함수 오버로딩의 일종이었습니다. 그렇다면 우선적으로 c 에서는 함수의 오버로딩이 허용되지 않기 때문에 쉽사리 답을 내릴 수 있습니다. C 에서는 함수 오버로딩이 불가능하기 때문에, 만약 데이터 이동 함수를 작성하려면, Copy_Struct 처럼 앞에 Copy라고 명시적으로 이 함수가 Str..
-
Vtable - 어디에 존재하는가..뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 3. 00:59
0. Vtable 이란 vtable 이란, Virtual Function Table의 약자로, 상속 구조에서 메서드를 virtual로 선언하게 되면, vtable이 생성되게 됩니다. vtable(가상 테이블)은 특수한 메모리 영역을 활용하여 알맞은 코드를 호출하게 되는데, 기본적인 정보는 virtual 메서드가 하나 이상 정의된 클래스마다 vtable은 하나씩 구현되어 있습니다. 따라서 vtable을 가진 클래스를 생성한 객체마다 이 vtable에 대한 포인터를 가지게 됩니다. vtable은 상속구조에서 동적 바인딩(dynamic binding)이라는 중요한 특성을 가지므로, 꼭! 공부해두시길 바랍니다. 1. vTable 실험 단일 상속구조를 가진, class의 경우 다음과 같이 메모리 구조를 가지게 됩..
-
Overloading 오버로딩 - 연산자뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 2. 12:54
0. Overloading 이란? C++에서는 코드에 이름이 같은 함수가 여러 개 있다면, 컴파일러(Compiler)는 함수를 호출하는 시점에, 타입이 일치하는 함수를 선택하게 되는데, 이를 오버 로딩(Overloading)이라 합니다.(오버 라이딩(Overriding)과 혼동하는 경우가 많으니, 주의해야 합니다.) 더구나 C++는 대부분의 연산자가 클래스와 관련된 특수 연산을 수행하도록 오버 로드하는 기능을 제공하는데, 예를 들어서 String 클래스는 + 연산자를 오버 로드하여 두 문자열을 연결할 수 있도록 합니다. 다양한 오버 로딩 연산자가 있지만, 이 글에서는 연산자 함수의 오버 로딩에 대해서 알아보겠습니다. (연산자 함수를 오버 로딩하면서, 유저가 만든 다양한 구조체 및 클래스에 대해서, 연산을..
-
Shared_ptr 내부 구조 & 주의점뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 17:43
0. shared_ptr shared_ptr 이란, 어떤 객체에 대하여, 더 이상 사용하는 곳이 없을 때, 자동적으로 메모리를 해제해주어, 사용자의 편의성을 증가시켜 주는 녀석입니다. msdn에서는 다음과 같이 설명하고 있습니다. shared_ptr은 내부적으로 각 객체가 몇 번 참조되었는지를 나타내는 control block을 가지게 되고, control block 이 0이 되었을 시, 객체의 메모리를 해제하게 됩니다. 원리는 이쯤 하면 되었고, shared_ptr에 대해 더 깊이 이해해보겠습니다. 1. shared_ptr의 내부 count 동작 shared_ptr 은 내부에 다음과 같은 control block을 가지고 있는데, T 객체에 대한 포인터 참조된 횟수를 세어주는 Reference Coun..
-
가상 소멸자 / 가상 소멸자 사용 이유뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 12:02
0. 상속이란 개념 c++ 뿐만 아니라 다른 언어에서도 상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다. 상속을 사용하게 되면, 기존에 정의되어 있는 클래스의 모든 필드와 메서드를 물려받아, 새로운 클래스를 생성할 수 있습니다. 그리고 상속을 하게 되면, 각 계층(부모 또는 자식)에 맞는 메모리 할당이 발생하게 되는데, 이는 다형성(polymorphism)이라는 중요한 성질을 띄게 됩니다. 다형성에 관한 글은 설명이 많아져 따로 작성하겠습니다..! 아무튼 상속을 사용하게 되면 여러가지 장점도 존재하지만, "주의해야 할 점"도 존재합니다. 그중 하나가 가상 소멸자에 관한 내용입니다. 1. 생성자 / 소멸자 호출 순서 파생된 클래스의 생성..
-
[C++] String to Int, Float, Double 자료형 / stoi, stol, stoll뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 00:56
0. atoi 계열 함수 및 sscanf( ) 기존 C에서는 str형식 사용시 다른 자료형(int, double, float)에 맞도록 읽어오려면, atoi( ) 및 sscanf( )로 형식을 지정해주었으며, 이를 활용한 간단한 예시는 밑과 같습니다. const char *str = "12345"; // atoi 계열 함수 int x = atoi(str); // sscanf 사용 int y; sscanf(str, "%d", &y); c++에서는 이와 비슷한 방법으로 stoi( ) 및 타입 캐스팅 그리고, 반복자를 활용하여, 데이터 변환을 할 수 있는 데, 그중에서, stoi( ) 계열 함수에 대해 알아보겠습니다. 1. c++ 에서의 stoi( ) c++에서 stoi() 함수는 문자열을 정수 값으로 변환하..
-
Map 을 Vector 로 변환하기뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 20. 17:09
0. Map을 Vector로 변환하기 Map을 Vector 자료형으로 변환할 일이 있었는데, 여러 가지 방법이 존재하여, 글로 남겨놓습니다. C++에서 Map 은 정렬되어 있는 컨테이너로써, Key-Value 쌍으로 이뤄져 있습니다. 이때, Key 들은 Compare 될 수 있는 값들에 의해 정렬되어 있고, Bidirectional 반복자를 가집니다. 1. Map 구조체 Vector로 변환하기 변환하는 방법에는 여러가지가 존재하지만, 대표적인 것 몇 가지만 알아보겠습니다. Vector 생성자 이용하기 Copy 알고리즘 이용하기 Transform 알고리즘 이용하기 ForEach 알고리즘 이용하기 방법 등이 존재합니다. 1 번은 Map의 반복자가 Pair 인 점을 활용하여, Vector 생성자에 반복자..