개발자의 길 52

[Effective C++] Chapter 3 자원 관리

항목 13: 자원 관리에는 객체가 그만! 스마트 포인터를 활용하여 별도로 객체 관리를 하지 않아도 되도록 만들자. std::auto_ptr, std::shared_ptr 을 활용 항목 14: 자원 관리 클래스의 복사 동작에 진지하게 고찰하자 RAII 객체를 복사할 때, 복사를 수행한 후 원래 객체가 해제가 되어 버리면 복사를 한 객체 쪽에서 해제 된 객체를 가질 가능성이 있다. 레퍼런스 카운터를 쓰거나 복사를 금지하는 방법을 활용하자 항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 캡슐화는 사용하기 편하고 실수를 줄이기 위해 만든 것이지, 반드시 데이터를 무조건 접근 금지하도록 하기 위한 것은 아니다. 암시적 변환이나 Get() 함수등을 통해 접근을 가능하도록 만들면 해..

[Effective C++] Chapter 2 생성자, 소멸자 및 대입 연산자

항목 5 : C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자.이유 : 컴파일러는 클래스의 생성자, 소멸자 등을 자동으로 만들어 내는데, 만약 멤버 변수로 포인터 등이 존재할 경우. 완전한 깊은 복사를 수행하지 않게 된다. 해결 : 클래스 선언시 생성자, 복사 생성자, 복사 대입 생성자, 소멸자, 이동 생성자( c++ 11) 이동 복사 생성자 (c++ 11) 등을 명시적으로 선언해두자. 항목 6 : 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자이유 : 구조적으로 복사되면 안되는 경우 ( 단 하나만 존재하는 클래스 등 ) 클래스를 사용하는 쪽에서 자동으로 생성된 복사 생성자를 이용해 버릴 수 있다. 해결 : 자동으로 생성되는 함수들을 private 로 선언하거나, =..

[C++] C++에서 문자열 줄단위로 받기

알고리즘 문제를 풀면서 Input을 벡터 파라미터로 주는것이 아니라 문자열로 주는 경우, 또는 문자열 자체를 처리하는 알고리즘인 경우에 C++로 풀어야 되는경우, 익숙하지 않으면 문자열을 읽는 부분에서부터 문제점이 생긴다. Input 42 3 4 5 6 8 2 4 1 2 31 1 2 31 1 4 *첫번째 값은 줄 수 N, 그다음부터 N개의 줄에 랜덤한 갯수의 값들이 들어온다. 위와같이 문자열이 주어지면 C++ 초보자의 입장에서 처리하기가 난감하다. cin 으로 처음 표준입출력을 배운 경우 공백과 개행문자를 무시해버리는 특성 때문에 어떻게 현재 라인을 구분해야할지 잘 모르게 되고, 다른 방법을 찾아보면서 getline() ,cin.getline() 등의 함수를 찾아보게 되는데 왜 또 그렇게 사용법은 많고 ..

개발자의 길 2018.09.29

[C++] C++에서 string 문자열을 받아와 split 하기

C++로 알고리즘 문제를 풀다 보면 다른 언어에 비해 구현하기 불편한 부분이 은근 많다. Java의 split 함수와 같이 작관적이고 쓰기 간편한 함수가 있었으면 좋겠지만, C++에서는 되게 다양한 방법으로 split을 할 수가 있어서 뭘 선택해야할지 꽤나 어려웠다. 그래서 정보를 여러곳에서 찾아보고, 괜찮은 방법을 몇가지 소개하고자 한다. 1. istringstream 과 getline 함수를 사용 istringstream 은 sstream 을 include 하여 사용할수있는 스트림 클래스이다. 사용법은 다음과 같다. 12345678910111213141516171819#include#include#include>#include using namespace std; int main(){ string a..

개발자의 길 2018.09.15

[Java, Android] Date, Calendar 클래스를 이용해 시간 표현하기

안드로이드 앱 개발을 하면서 날짜를 가져와서 사용해야 할 때가 꽤 있는데, 매번 사용할때마다 사용방법을 까먹어서 계속 다시 찾게 되다 보니 이제는 외워야 겠다 생각이 들어 포스팅을 하게 됬다. Java에서는 Date, Calendar, SimpleDateFormat 등의 클래스를 제공해서 날짜 정보를 관리할 수 있게 하는데, 이 포스트에서는 이 세가지 클래스들만을 이용해서 날짜정보를 다루는 방법을 알아보겠다. Date 날짜 정보를 저장하는 자료구조로써 년, 월, 일, 시, 분, 초 등의 정보를 저장할 수 있다. Calendar 클래스에서 getTime() 메소드를 통해 Calendar 클래스에 세팅되어있는 시간정보를 얻을 수 있는데 이때 Date 타입으로 리턴을 해준다. 또 나중에 쓰게 될 SimpleD..

개발자의 길 2018.09.02

[Data Structure] Binary Search Tree - 이진 탐색트리

이진 탐색트리란? - BST (Binary Search Tree) 그림 1. 이진 탐색트리 (이미지 출처 : 위키피디아) 이진 탐색트리는 트리 구조로써 한 노드가 자신보다 작은 값을 가진 Left Child와 자신보다 큰 값을 가진 Right Child 두 노드를 가지는 구조를 말한다. 탐색 시에 값의 대소비교를 통해 자식 노드를 탐색하면서 값을 찾아내므로 탐색 횟수가 일반적인 트리구조(한쪽으로 치우쳐 있지 않은)의 깊이인 log 2의 N과 같다고 볼 수 있기 때문에 O(log N)의 시간 복잡도를 가진다. 이진 탐색 트리의 특징 1. 이진 탐색트리는 DFS로 탐색하며 값을 출력했을 경우 오름차순으로 출력된다는 특징이 있다. 2. 이미 정렬되어 있는 값을 넣는 경우, 한쪽으로 치우치게 자식이 만들어지므로..

개발자의 길 2018.05.17

[C++] STL - pair, tuple, bitset 사용방법

pair pair는 다양한 타입의 데이터 2개를 쌍으로 저장 할 수 있도록 해 주는 컨테이너다. 사용하기 위해서는 utility를 include 해줘야 된다. 멤버변수로는 first, second 두가지만 있으며 swap, assign operator, make_pair 등의 함수를 지원한다. unordered_map에서 사용된다. 선언방법, 멤버함수 사용방법, 멤버변수 접근방법 등은 아래 코드를 참고하면 된다. 12345678910111213141516171819202122232425#include #include using namespace std; int main(){ //선언 pair aPair; //선언과 대입 pair bPair (15, "hello"); //make_pair를 이용해 assi..

개발자의 길 2018.04.06

[Algorithm]백준 - 스타트와 링크

https://www.acmicpc.net/problem/14889 알고리즘 설명은 주소 참고 N이 작기 때문에 Brute force 방법을 이용해 풀기로 했고 모든 팀 조합을 조사해서 min 값을 출력하면 된다고 생각했다. 이 문제의 핵심은 조합 (Combination)을 짧은 시간 내에 구할 수 있느냐다. 순열과 조합에 대한 개념은 아래 글을 참고해주길 바란다. (글 작성중) 코드는 아래와 같다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909..

반응형