전체 글

전체 글

    C++ 유니폼 초기화와 생성자

    C++11에 유니폼 초기화가 추가되었다. {}를 이용한 초기화여서 Brace-Initialization 이라고도 부른다. struct A { int x, y; }; class B { public: B(int x, int y) : mX(x), mY(y) {} private: int mX, mY; }; A a = {10, 20};// {} B b(10, 20);// () int c[4] = {1, 2, 3, 4};// {} C++11에서는 이 부분을 모두 {}를 이용하는 유니폼 초기화로 문법을 통일시켰다, =을 붙이거나 붙이지 않거나 모두 유니폼 초기화를 사용할 수 있다. A a1 = {10, 20}; B b1 = {10, 20}; A a2{10, 20}; B b2{10, 20}; 유니폼 초기화는 일반 자료..

    C# LINQ

    using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices.ComTypes; namespace ConsoleApp8 { class Profile { public int height; public string name = null; } class Program { // foreach로 해당 데이터들 접근가능, 람다식 형식이여야됨. // from : 데이터를 어디서 가져오는지 지정해주는 메소드, 대체 메소드 없음. // where : 가져온 데이터들에 조건을 거는 메소드, .Where()로 대체 가능. // let : // orderby : 가져온 데이터들을 정리해주는 메소드, as..

    객체지향 - SOLID 개발 5대 원리

    S - SRP(Single responsibility principle) 단일 책임 원칙 - 모든 클래스는 단 하나의 책임을 가져야한다. O - OCP(Open Closed Principle) 개방 - 폐쇄 원칙 - 확장에 대해서는 개방 되어 있어야 하지만, 수정에 대해서는 폐쇄 되어야 한다. L - LSP(liskov substitusion Principle) 리스코프 치환 법칙 - 문제 없이 업캐스팅(Up-Casting, 부모의 객체로 자식의 객체를 가르킬 수 있는 것)이 되야한다. I - ISP(Interface Segregation Principle) 인터페이스 분리 원칙 - 자신이 이용하지 않는 클래스를 의존하지 않아도 된다 혹은 아예 의존시키지 말아야한다. D - DIP(Dependency I..

    C++ 함수 객체 (Fuction Object) 템플릿 / 람다식

    장점 : 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있습니다. 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타입으로 인식합니다. 일반 함수보다 빠릅니다. 인라인 될 수 있고(함수가 있어야 하므로 인라인 함수의 복사본 함수를 만들어 냄) 컴파일러가 쉽게 최적화 할 수 있습니다. 템플릿 enum class e_operation_type { ADD, SUB, MUL, DIV, MAX }; template class Template_function_obj { public: void operator()(e_operation_type _operation_type, T _lval, T _rval) { switch (_operation_type) { ca..

    C# 형변환 is as 키워드

    is는 객체가 해당 형식에 해당하는 지를 검사하여 bool 값을 결과로 반환. as는 형 변환 연산자와 같은 역할을 하지만, 형변환 연산자가 변환에 실패하는 경우에는 예외를 던지는 반면, as 연산자는 객체 참조를 null로 만든다. using System; class Mammal{} class Dog : Mammal{} class Cat : Mammal{} Mammal m1 = new Dog(); Dog dog; Cat cat; if(m1 is Dog) { dog = (Dog)m1; Console.WriteLine("m1 is dog"); } else Console.WriteLine("m1 is not dog"); if (m1 is Cat) { cat = (Cat)m1; Console.WriteLine..

    C++ 11 버전 주 기능

    1. RValue 우측값이라고도 불리며, STL알고리즘을 비롯하여 임시객체를 생성하고 파괴하는 일이 잦은 코드에서는 큰 성능 향상을 불러올 수 있는 개념입니다. void Ex1() { std::vector vec; vec.push_back(SomeClass(1, 2, "3")); } 2. 컨테이너에 emplace 메소드 추가 여기에 새로운 SomeClass 인스턴스를 추가하려고 하면 push_back(SomeClass(1, 2, "3")) 처럼 귀찮게 SomeClass를 타이핑해야합니다. 그런데 C++ 11에서는 이를 간편하게 하는 emplace 메소드 추가. void Ex2() { std::vector vec; vec.push_back(SomeClass(1, 2, "3")); vec.emplace_ba..

    [Unreal] 언리얼 충돌체 관련 함수와 이벤트(델리게이트) 바인딩 방법 #2

    언리얼 엔진에선 두 가지의 충돌체가 존재한다. 하나는 메쉬(static 또는 skeletal)의 충돌체 그리고 충돌 컴포넌트(SphereComponent,BoxComponent 기타 등등). C++로 충돌체 이벤트 바인딩할 수 있는 방법 총 두가지가 있다. 오버라이딩 방법 Hit 이벤트를 사용하려면 Simulation Generates Hit Events가 체크 되어있어야 한다. Overlap 이벤트를 사용하려면 Generate Overlap Events가 체크 되어있어야 한다. 항상 Super:: 부모클래스의 해당 함수를 호출 하여야한다. 예) NotifyHit 함수를 오버라이딩 했다, Super::NotifyHit(); NotifyHit (오브젝트로부터 충돌했다) 예시) virtual void Not..

    [실2] 11724 - 연결 요소의 개수

    Dfs로 주변 정점이 있는지 파악하고 있을 시 방문 여부 표시 없을 시 새로운 그래프로 간주 후 1개 증가 #include #include #include #include using namespace std;#define FAST_IO() ios::sync_with_stdio(0); cin.tie(0);#define y first#define x secondusing IntPair = pair;IntPair dir[]{ {1, 0}, // 상 {-1, 0}, // 하 {0, -1}, // 좌 { 0, 1 }, // 우};vector> graph;vector vis;int n, m;void Dfs(int idx){ vis[idx] = true; for (int i = 0; i > n >> m; ..

    [1] 신고 결과 받기

    vector solution(vector id_list, vector report, int k) { vector answer(id_list.size()); unordered_map report_map; unordered_map idx_map; stringstream ss; for (int i = 0; i > first >> second; report_map[second].insert(first); ss.clear(); } for (auto it : report_map) { if (it.second.size..

    [2] 기능 개발

    vector solution(vector progresses, vector speeds) { vector answer; map tmp_map; int size = progresses.size(); int* arr_days = new int[size] {0}; for (int i = 0; i < size; i++) { int count = 0; for (int j = progresses[i]; j = 100) { arr_days[i] = count; break; } } } for (int i = 1; i < size; i++) { if (arr_days[i] < arr_days[i - 1]) arr_days[i] = arr_days[i - 1]; } for (int i = 0; i < size; i++) ..