namespace이름 공간은 어떤 정의된 객체에 대해 어디 소속인지 지정해주는 것코드의 크기가 늘어나고, 다른 사람의 코드를 쓰는 경우가 많아지고 있음중복된 이름을 가진 코드가 많아짐c++에서는 이를 구분같은 이름이라도 소속된 이름 공간이 다르면 다른 것으로 취급std::cout위의 경우 std라는 이름 공간에 정의된 cout을 의미이름 공간 정의 방법// Header1.hnamespace Header1 { int foo(); void bar();}// Header2.hnamespace Header2 { int foo(); void bar();}위 코드에서 Header1에 있는 foo는 Header1이라는 이름 공간에 foo가 된다.Header2에 있는 foo의 경우 Header2라..
분류 전체보기
상속을 간단하게 표현하면?상속이란 A라는 클래스의 멤버를 B라는 클래스에서도 사용할 수 있도록 하는 것또한, B라는 클래스가 A라는 클래스의 기능을 확장할 수 있게 하는 것virtual 키워드란?override와 final 키워드는 virtual과 짝꿍으로 사용된다.virtual은 상속 받은 자식 클래스에서 해당 함수를 오버라이딩 해서 사용하라는 것을 알려주는 키워드이다.또한, 다형성을 구현할 수 있다.virtual 키워드를 사용하게 된다면 업캐스팅을 하였을 때 동적 바인딩을 할 수 있게 된다.원래 업캐스팅을 하게 된다면 정적 바인딩으로 인해 부모의 함수를 호출함class Parent {public: void print() { std::cout print(); p = c; p..
c++ 구조적 바인딩 (structured bindings)structured bindings는 C++17부터 도입된 기능구조적 바인딩은 여러 변수에 sub object 또는 initializer의 elements를 할당할 수 있게 해주는 기능이다.이를 사용하면 여러 변수를 선언할 때 배열, 구조체, 페어, 튜플의 값으로 초기화할 수 있다.사용방법auto 키워드와 대괄호 사이에 변수명을 적고 오른쪽에 값을 넣어주면 된다.int arr[3] = {1, 2, 3};auto [a0, a1, a2] = arr; // 유의할 점반드시 auto 키워드를 사용해야 한다는 것왼쪽에 선언한 변수의 개수와 오른쪽에 표현식의 값 개수가 일치해야 한다는 것구조적 바인딩은 배열 뿐 아니라 모든 멤버가 non-static이면서 ..
1. lambda 표현식lambda는 람다 표현식, 람다 함수, 익명 함수 등으로 불림람다 함수의 형태는 다음과 같다.#include #include void sum1(int a, int b){ std::cout 위 코드를 보면 람다 함수의 모양이 이상한 것을 볼 수 있다.[captures] (parameters) -> return_types_declaration { lambda_statements;};변수 캡쳐현재 함수에서 사용할 외부 변수들비어있다면 아무것도 아님= 을 넣으면 해당 함수의 모든 변수를 전부 사용한다는 의미& 를 넣으면 모든 변수를 참조형으로 받아드린다는 의미[=, &num] 처럼 특정변수만 참조형으로 사용하는 것도 가능매개 변수함수에서 받아드리는 인자리턴 타입void..
물어봇물어봇은 상품에 대한 종합적인 정보를 파악하기 위해 많은 시간을 할애하는 사람들을 위해 챗봇 인터페이스를 사용하여 상품 정보, 추천, 리뷰의 속성과 감성별로 분류한 요약본을 제공합니다.저는 팀장의 역할을 수행하며 UI 설계와 구현, 자연어 처리 모듈 설계와 구현, 프로토타입 개발을 진행하였습니다.물어봇 프로젝트를 통해 한국지식정보기술학회의 춘계학술대회에서 융복합우수논문상을 받았고, 한성대학교 공학경진대회에서 동상을 받을 수 있었습니다.자연어 처리 모듈이 뭔가요?자연어 처리 모듈에는 요약 모듈, 추천 모듈, 상품 정보 모듈이 존재합니다.저는 이 모듈 중 추천 모듈을 담당하여 개발하였습니다.추천 모듈 어떻게 개발했나요?사전에 상품에 대한 리뷰를 문장 벡터로 변환하여 Elastic Search의 Vect..
https://www.acmicpc.net/problem/1197 이 문제는 스패닝 트리를 생성할 때 가중치의 합을 구하면 된다. 스패닝 트리는 크루스칼 알고리즘을 사용해 구현하였다.union - find를 사용해 스패닝 트리를 생성할 수 있었다. 부모가 같지 않다는 것은 스패닝 트리를 만들 수 있는 조건에 해당하기 때문에answer에 가중치를 누적하면 된다. 부모가 같지 않는지 확인하는 것은 find함수를 사용한다. #include #include #include using namespace std;int V, E;int parent[10001];vector>> costs;int answer = 0;int find(int x) { if (parent[x] == x)return x; else return..
스패닝 트리?스패닝 트리(ST)는 최소한의 간선으로 모든 정점이 연결되어 있는 구조단, 사이클이 생성되선 안된다.어떤 그래프로 스패닝(신장) 트리를 만들 때 사이클을 만드는 간선은 선택하지 않는다.최소 연결간선의 수가 가장 적다.정점의 수가 n개 일 때, 스패닝 트리의 간선의 수는 언제나 n - 1개이다. 사이클이 발생해서는 안된다. 사이클이 있다는 것은 최소로 연결되지 않았다는 의미1 - 2 - 3으로 연결되어 있을 때 1과 3은 직접적으로 연결되어 있지 않더라도 연결되어 있다고 본다.DFS, BFS를 사용해여 그래프에서 스패닝 트리를 찾을 수 있다.한 그래프에서 스패닝 트리는 여러개 존재할 수 있다.최소 비용 스패닝 트리(MST)가장 적은 비용으로 모든 노드를 연결하고자 할 때 사용가정 적은 비용이라..
https://www.acmicpc.net/problem/1786 이 문제는 KMP 알고리즘을 사용해서 중복 문자열을 찾는 것이다. KMP알고리즘은 아래 참고https://hanseongbugi2study.tistory.com/310 [Algorithm] KMP 알고리즘Knuth-Morris-Pratt(KMP) 알고리즘패턴을 문장안에서 좌에서 우로 비교하는 것완전 탐색과 다르게 효율적으로 패턴을 찾을 수 있다.패턴과 문장의 불일치가 발생하였을 때 중복 연산을 최대한 피하면hanseongbugi2study.tistory.com 실패함수는 아래 코드와 같다.void Failure(){ int j = 0; for(int i = 1;i0 && P[i] != P[j]) j = tab..