본문 바로가기

C++

<algorithm>을 활용한 정렬 CP를 하면서 헷갈리는 것을 정리했다. 배열 정렬과 벡터 정렬 1 2 3 4 5 6 7 8 9 // 벡터(n은 정렬할 원소의 개수) sort(vec.begin(), vec.end()); // 오름차순 sort(vec.begin(), vec.begin() + n); // 오름차순 sort(vec.begin(), vec.end(), greater()); // 내림차순 // 배열 sort(arr, arr + n); // 오름차순 sort(&arr[0], &arr[n]); // sort(arr, arr + n, greater()); // 내림차순 char 및 string의 정렬도 똑같이 작동한다. 비교 함수인 greater()에 자료형을 정해주지 않고 비워놓은 것을 확인할 수 있다. 이렇게 자료형을 쓰지 않아도..
C++ 토막 지식(19.01.16) - class Class private and public객체지향의 핵심 특성은 데이터 은닉화(data hiding)이다. 데이터 은닉화는 클래스 외부의 함수가 클래스 내부에 있는 정보에 접근하지 못하도록 막아주는 것이다. 보안 상의 문제 때문에 은닉화를 한다기보다는 클래스 외부에서 그 데이터로 접근할 필요가 없을 때 은닉함으로써 프로그래머가 실수를 저지를 가능성을 줄여준다. private 과 함께 선언된 변수나 함수들은 클래스 내부에서만 사용할 수 있고, public 과 함께 사용된다면 이와 반대로 외부에서도 접근할 수 있다. 클래스를 초기화 할 때는 Initializer List가 선호된다. 예를 들어 이중 연결 리스트를 위한 노드를 만든다면 다음과 같이 생성자를 만들어 초기화를 할 수 있다. 12345678910..
C++ 토막 지식(19.01.14) - struct, enum Struct 구조체(Structure)은 간단한 변수들의 모음이다. 어떠한 자료형도 구조체에 들어올 수 있으며, 구조체 그 자체나 사용자가 만든 자료형도 들어올 수 있다. 구조체에 들어간 아이템을 구조체의 멤버(member)라고 부른다. 123456789101112131415161718192021222324252627struct part //specify a structure{int modelnumber; //ID number of widgetint partnumber; //ID number of widget partfloat cost; //cost of part}; int main(){ //initialize variablepart part1 = { 6244, 373, 217.55F };part par..
C++ string 또는 char 배열을 int 타입으로 바꾸는 방법 출처 BOJ 5430 번과 같은 문제를 풀 때 참 곤란한 점이 있는데 입력을 [1,1,2,3,5,8]과 같이 주고, 여기서 숫자를 뽑아내서 사용해야 하는 것이다. 배열에 있는 숫자가 모두 한자리 수라면 간단하게 해결할 수 있지만 이 문제의 경우에는 원소가 1 에서 100 까지의 수이므로 쉽지 않았다. 그래서 이번 기회에 string 또는 char 배열을 int 타입으로 바꾸는 방법을 정리해봤다. 1. stringstreamstringstream 은 숫자로 이루어진 string 을 int 나 float, double 로 바꾸는 쉬운 방법이다. [1,11,2,33,5,100] 에서 숫자만 추출하는 코드를 작성해봤다. 참고로 sstream 을 include 하면 string 을 include 할 필요가 없는 ..
C++ 토막 지식(19.01.09 - 10) 1. std::endl 은 output 버퍼를 비워주고(flush), '\n'은 그렇지 않다. 버퍼를 자주 비워줘야 한다면 endl 을 쓰고 그렇지 않다면 '\n' 을 사용하면 된다. 버퍼에 대해서는 좀 더 배워서 정리할 예정이다. 2. char 타입의 데이터는 -128 부터 127 까지의 정수를 담을 수 있다. 1 바이트만 차지하기 때문에 숫자를 담기 위한 자료형으로 가끔 사용되기도 하지만, 실제로는 ASCII 문자를 담기 위해 사용한다. ASCII 문자는 문자에 숫자를 매겨 표현하는 것인데 그 범위가 0에서 127까지만 있으면 숫자, 영어 소문자, 대문자, 특수문자가 포함되므로 char 타입에 맞다. 하지만 프로그램에서 -128 부터 127 까지의 수로는 한국어나 중국어, 일본어 등 외국어까지 표현할..
UML(Unified Modeling Language)란? UML은 통합 모델링 언어라고도 한다. UML은 프로그램을 모델링하기 위한 언어로써, 선과 도형으로 프로그램의 요소들을 표현함으로써 단순화 시킨 것이다. UML을 사용하면 코드를 분석하느라 진을 다 빼지 않더라도 복잡한 프로그램을 시각화 할 수 있다. UML은 서로 다른 세 개의 모델링 언어로부터 시작되었다. 하나는 Rational Software의 Grady Booch이 만든 것이고, 다른 하나는 General Electric의 James Rumbaugh이 만든 것이고, 마지막 하나는 Ericson의 Ivar Jacobson이 만든 것이다. 결국에는 Rumbaugh와 Jacobson이 Rational 사에 합류하게 되며, 1990년대 후반에는 각자가 개발한 언어들을 하나로 통합하는 작업을 했는데, 이것..
객체지향 언어의 특성 다른 객체지향 언어도 있겠지만, C++을 기준으로 알아봤다. 아직은 서론 수준 정도의 지식만 가지고 있어서 많은 내용을 담지 못했지만 좀더 공부하고 나서는 하나씩 자세히 알아보는 기회가 있었으면 한다. 객체(Objects) 객체지향 언어로 문제에 접근한다면, 더 이상 어떻게 하면 문제를 함수로 쪼갤 수 있을지 고민을 안 해도 된다. 대신 어떻게 객체로 쪼갤 수 있을지에 대한 고민을 해야 한다. 함수라는 단어와 객체라는 단어를 떠올렸을 때 함수보다는 객체가 프로그램을 만들 때 훨씬 더 쉬울 것 같다는 느낌이 드는데, 이것은 프로그래밍 세계의 객체와 실제 세계의 객체가 매우 비슷하기 때문이다. 지금까지 절차지향 언어에서는 이렇게까지 정밀한 모델을 만드는 것은 힘들었다. 프로그래밍에서는 모든 것이 객체가 될 ..
객체지향 프로그래밍(OOP)이 필요한 이유 객체지향 프로그래밍(Object Oriented Programming, OOP)은 과거 프로그래밍 세계를 지배하던 패러다임에서 발견된 한계를 극복하고자 만들어졌다. 그렇기 때문에 OOP를 제대로 이해하기 위해서는 과거 프로그래밍 패러다임에 어떤 한계가 있는지 알아야 한다. 절차적 언어(Procedural Languages) C, Pascal, FORTRAN 등과 같은 것들이 절차적 언어이다. 절차적 언어는 실행문(statements)을 통해 컴퓨터에게 어떤 작업을 수행하라고 말한다. 절차적 언어로 만든 프로그램은 이러한 실행문의 집합이다. 아주 작은 프로그램의 경우는 실행문 만으로도 만들 수 있다. 하지만 프로그램이 커질수록 실행문 만으로 프로그램을 만들고, 관리하기가 힘들어진다. 수백, 수천 줄의 실행..