본문 바로가기
반응형

C++146

c++의 move, rvalue, lvalue에 대한 설명....(복잡해요~) 무브...... move........ 사전에 알아야할 것들이 있습니다. 1. 복사생성자(깊은복사). 2. static_cast 3. lvalue, rvalue move에 대해 이해하려면 위 3가지는 반드시 짚고 넘어가야 합니다. 1. 복사생성자에 관해선 이미 글을 올린것이 있으니 참고하시기 바랍니다. · 얕은복사와 깊은복사 : https://hwan-shell.tistory.com/42 · 복사생성자의 호출 과정 : https://hwan-shell.tistory.com/43 2. static_cast에 관해서는 아래 링크를 클릭해 주세요. https://hwan-shell.tistory.com/211 3. lvalue, rvalue는 따로 정의할까 하다가같이 설명하는게 좋을것 같아 move와 같이 설.. 2019. 12. 17.
c++ 양파 까듯이 계속 튀어 나오네.... move에 대해 글을 작성하려고 여러 자료들을 찾다보니 static_cast라는 녀석이 나오고 이녀석에 대해 찾다보니 rvalue, lvalue에 대해서 나오고 rvalue오 lvalue에 대해 찾다보니 참조자와 const, 임시객체, 리터럴 변수 등이 나오고.... 그러다 보니 순간 "내가 뭐하다 여기까지 왔지?" 라는 생각이 든다..... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 2019. 12. 16.
C++ set 사용법과 설명... set에 대해 설명하고자 합니다. 사용법도요. 아마 set을 사용하려고 검색하셔서 오시게 된 분이시라면, set의 특징을 잘 아시는 분일겁니다. 네, set의 특징은 다음과 같습니다. 1. 숫자든 문자든 중복을 없엔다. 2. 삽입하는 순서에 상관없이 정렬되서 입력이 된다. 이 특징을 모두 만족시킬 수 있는 자료구조는 이진 트리 입니다. 즉, set은 벨런스 트리로 Red-Black 트리로 만들어져 있습니다. 이런식으로 말이죠... 이진트리 특성상 삽입과 삭제가 용이합니다. 자료 찾는것도 준수하고요. 그럼 사용법을 알아보겠습니다. Set의 초기화 set 변수 기본적인 선언방법 set 변수(복사할 변수) 선언 후 복사한 값으로 초기화 set 변수 = 복사할 변수 서언 후 복사한 값으로 초기화 #include.. 2019. 12. 13.
2020 카카오 블라인드 공채 문제 2번 설명 및 풀기 문제 풀러가기 완성된 코드 #include #include #include using namespace std; int index; bool check(const string& p){ int left = 0, right = 0; bool ret = true; stack s; for(int i = 0; i < p.size(); i++){ if(p[i] == '('){ left++; s.push('('); }else{ if(s.empty()) ret = false; else s.pop(); right++; } if(left == right){ index = i + 1; return ret; } } return ret; } string solution(string p) { if(p == "") return ".. 2019. 12. 11.
C++ string 사용법 및 기능정리(동작방식) C++에는 string이란 클래스가 있습니다. 이걸 사용하려면 string 헤더파일을 선언해 줘야 하며 다양한 기능을 제공합니다. 그렇다면 string이란 녀석이 왜 생겨났을까?? 기존 C언어에서 문자열 처리를 하려면 상당히 골치 아팠습니다. 특히 가변 길이를 처리할때요. 프로그래머가 손수 메모리를 재 할당 해주거나 그게 아니라면 충분한 문자열 배열을 선언해주거나... 너무 번거롭고 나중에 문제생길 것들이 많았죠... 예상치 못한 결과도 초래했다고 합니다. 그래서 C++에서는 class로 문자열을 감싸고 public을 통해 쉽게 사용할 수 있도록 정의하고 만들었습니다. 그래서 C++은 문자열 사용을 기본적으로 string으로 하고 있습니다. 그렇다면 string에 사용법에 대해 알아보도록 하겠습니다. S.. 2019. 11. 25.
C++ vector사용법 및 설명 (장&단점) C++의 vector는 C++ 표준라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 사용하기 편하게 정의된 class를 말합니다. vector를 생성하면 메모리 heap에 생성되며 동적할당됩니다. 물론 속도적인 측면에서 array(배열)에 비해 성능은 떨어지지만 메모리를 효율적으로 관리하고 예외처리가 쉽다는 장점이 있어 많이 사용하고 있씁니다. 그럼 우선 사용법에 대해 설명하겠습니다. Vector의 초기화 vector 변수명 백터 생성 vector 변수명(숫자) 숫자만큼 백터 생성 후 0으로 초기화 vector 변수명 = { 변수1, 변수2, 변수3... } 백터 생성 후 오른쪽 변수 값으로 초기화 vector 변수명[] = {, } 백터 배열(2차원 백터)선언 및 초.. 2019. 11. 24.
2020 카카오 공채 : 문자열 압축 (풀이 및 코딩) 조건은 s의 길이가 1 이상 1,000 이하.... 모든 알파벳은 소문자 입니다. 해당 코드는 2중 for문으로 충분히 풀이가 가능하고 탐색 조건도 쉽습니다. 앞에서부터 문자들을 차례대로 비교하면 됩니다. 처음엔 1개씩, 그 다음 2개, 그 다음 3개 ..... (s의 총 길이 / 2) 개 까지... 비교문자 마지막을 왜 s의 총 길이 / 2로 했냐면 그 이상 넘어가 버리면 비교의 의미가 없기 때문입니다. (비교할 수가 없죠) 그래서 예제 1번을 보면 aabbaccc 이렇게 있는데, 처음엔 a, a, b, b, a, c, c 하나씩 비교하고, 그 다음엔 aa, bb, ac, cc 이렇게 2개씩 비교하고, 그 다음엔 aab, bac, cc 이렇게 3개씩 비교하고..... 이런식으로 비교한 후 중복되는 알파.. 2019. 11. 23.
C++] 위상정렬 구현 및 설명 위상정렬은 각 노드들의 간선 개수를 구한 후 간선개수가 가장 적은 요소부터 순회하는 알고리즘입니다. 여기서 간선 개수란 각 노드마다 연결된 개수를 의미합니다. 간선 개수가 적은 요소들을 순회하기 때문에 한번에 원하는 지점까지 못가게 되는 특징이 있습니다. 위상정렬을 이용한 예제들은 주로 '게임 스킬트리, 우선순위에 대한 시간 문제 등...' 다양하게 사용되고 있습니다. 아래 그림을 통해 코드를 구현해 보겠습니다. 여기서 만약 A에서 E로 간다고 가정한다면 A는 B나 C를 거치고 D를 거처서 E로 가거나 혹은 D에서 F를 거처 E로 가게 됩니다. 즉, 노드 간선을 기점으로 모든 노드를 순서대로 거처가는걸 알 수 있습니다. 이 간선을 거처가는것이 하나의 조건이 될 수 있습니다. 아래는 구현 코드 입니다. #.. 2019. 9. 26.
C++] 인접 리스트 구현 인접리스트는 그래프의 한 종류입니다. 인접리스트를 쓰는 가장 큰 이유는 바로 탐색 때문인데, 우리는 인접리스트를 통해 연결된 모든 노드들을 확인할 수 있습니다. 우선 아래의 그림의 그래프를 만들어 보겠습니다. #include #include #include #include using namespace std; enum { A, B, C, D ,E}; void AddGraph(vector * v, int x, int y) { v[x].push_back(y); v[y].push_back(x); } int main(void) { vector g[5]; AddGraph(g, A, B); //A B 연결 AddGraph(g, A, D); //A D 연결 AddGraph(g, B, C); //B C 연결 AddGr.. 2019. 9. 23.
[C++ 풀이] Codility - Lessons 6, (Sorting) Triangle 이 문제는 Codility 사이트에서 확인하고 문제를 풀 수 있습니다. https://www.codility.com/ 문제. 설명 A[] 배열이 주어지고 A의 범위는 0 ~ 100,000. A배열의 각 원소의 값은 −2,147,483,648 ~ 2,147,483,647. A배열의 원소중 다음의 조건식을 만족하는 결과를 구하시오. A[P] + A[Q] > A[R], A[Q] + A[R] > A[P], A[R] + A[P] > A[Q]. 0 ≤ P < Q < R < N 위 예제인 A[0] = 10 A[1] = 2 A[2] = 5 A[3] = 1 A[4] = 8 A[5] = 20 이걸 보면 알 수 있습니다. 해당 조건을 만족하는 배열 원소는 A[0] = 10, A[2] = 5, A[4] = 8 입니다. 배열 .. 2019. 9. 2.
[C++ 풀이] Codility - Lessons 5, (Prefix Sums) MinAvgTwoSlice 이 문제는 Codility 사이트에서 확인하고 문제를 풀 수 있습니다. https://www.codility.com/ 문제. 설명 대충 설명하자면 이렇습니다. 1. 정수가 저장된 N개의 배열을 준다. 2. N개의 배열에는 임의의 정수가 있으며 범위는 -10,000 ~ 10,000이다. 3. 이 배열 요소 중 2개 이상의 합의 평균 값 중 가장 작은 평균 값이 시작되는 index 번호를 구하라!! 예를 들어 A [0] = 4 A [1] = 2 A [2] = 2 A [3] = 5 A [4] = 1 A [5] = 5 A [6] = 8 이 있다고 가정할 때 가장 작은 평균 값은 A[1] + A[2] 입니다. 이 때 시작하는 index값인 1을 반환해 줘야 합니다. 다른 예를 들어보겠습니다. A [0] = 4 A.. 2019. 8. 4.
[C++ 풀이] Codility - Lessons 5, (Prefix Sums) GenomicRangeQuery 이 문제는 Codility 사이트에서 확인하고 문제를 풀 수 있습니다. https://www.codility.com/ 문제. 설명 N 길이만큼의 랜덤한 문자열이 주어 집니다. (N의 크기는 1 ~ 100,000) 문자열의 구성은 A, C, G, T 이렇게 4가지 입니다. 중간에 스페이스바는 없으며 위 4개의 알파벳 조합의 문자열이 주어집니다. 알파벳은 다음과 같은 점수를 갖고 있습니다. A = 1, C = 2, G = 3, T = 4 위 문제는 주어진 범위 내에 4가지 알파벳으로 구성된 문자열 중 점수가 가장 작은 알파벳을 찾아내는 문제 입니다. 범위는 P와 Q로 주어 집니다. P와 Q 범위는 1 ~ 50,000이며(P[0] ~ P[49999]) 각 요소의 값은 0 ~ N-1 까지 있을 수 있습니다. P.. 2019. 8. 1.
C++ for_each문 개념과 사용법 설명 C++에는 기본 문법인 for문이 있습니다. for문으로 모든 반복문을 만들 수 있고 실행시킬 수 있습니다. 하지만 단순 for문으로 만들기엔 귀찮거나 손이 많이가는 반복문을 만들 수 밖에 없는 상황이 종종 존재합니다. 한가지 예시를 들겠습니다. #include #include #include using namespace std; void print_fnc(int n) { cout 2019. 8. 1.
C++ 함수 포인터란? 왜 사용할까? C와 C++에서는 포인터라는 중요한 요소가 존재합니다. 그리고 포인터를 많이 활용하죠. 그 이유는 주소 값을 대입해 해당 위치로 이동하거나 접근이 가능하기 때문입니다. 함수 또한 그 주소 값을 갖고 호출이 되면 해당 주소 값으로 이동해 프로그램을 실행하게 됩니다. 함수 포인터란 함수의 주소 값을 지닐 수 있는 포인터 변수 입니다. 선언 방법은 다음과 같죠. int (*fp1)(); int (*fp2)(int); int (*fp3)(int, int); bool (*fp4)(); void (*fp5)(); 위와 같은 형식으로 정의할 수 있습니다. 반환 타입은 말 그대로 함수의 반환 타입. 변수 이름은 함수를 저장할 수 있는 변수의 이름 ※앞에 *이 붙었는데 이는 포인터 변수이기 떄문입니다. 설명을 덪붙이자면.. 2019. 7. 20.
c++ 함수 객채란?? C++에서는 객체를(클래스) 함수처럼 사용이 가능합니다. 설명하기에 앞서 연산자 오버라이딩 개념을 알아야 합니다. 연산자 오버라이딩1(클릭) 연산자 오버라이딩2(클릭) 이 함수 객체를 왜!!!! 사용하는지 알아보기에 앞서서 우선 예제를 보겠습니다. #include using namespace std; class Plus{ public: Plus(){ num = 0; } int operator()(){ num++; return num; } int operator()(int n){ num = ++n; return num; } friend ostream& operator 2019. 7. 18.
728x90
반응형

스킨편집 -> html 편집에서