목록분류 전체보기 (71)
영넌 개발로그
container 중 set 이라는 것은 집합을 의미합니다. 값을 중복없이 저장하는 데에 자주 사용하고 집합 내에 유무를 체크하는데에 사용된다. 따라서 중복성 검사를할 때에 사용되는 자료구조 이기도하다. (check if element already exists) 예를 들어 문장 단위로 잘라서 set으로 만든 후, 그 문장이 다른 set에 나타나는지 안나타나는지에 사용하여 표절 검사를 할 수 있다. 집합 내에 유무를 체크하기 위해서는 method find를 사용한다. set은 증가하는 형태로 저장하는 특징이 있기 때문에 정렬된 형태로 뽑아낼 수 있다. 삽입할 때는 method insert를 사용한다. 반환할 때는 쌍으로 을 반환한다. bool 값은 중복성에 따라 true와 flase를 반환하고, iter..
STL (Standard template library) C++의프로그래밍 개발 효율성을 높여주는 라이브러리이다. C++ 국제 표준에서 제정만하고 구현은 개발자가 알아서 하는 것이다. data structure와 algorithm 등을 구현해둔 라이브러리이다. container에 데이터를 저장할 수 있는 공간이다. vector, array, deque(덱): double ended que, list 등이 있다. deque는 앞과 뒤 모두 in/out이 가능하다. 일반적인 큐처럼도 사용이 가능하다. vector와 array, deque는 모두 배열이어서 연속된 공간이 필요하다. 이런 연속되지 않은 공간을 사용하기 위해 C언어에서 SLL과 DLL을 사용했는데, STL 에서는 SLL은 forward list,..
Function template 여러가지 타입(type)을 동시에 처리 가능한 함수이다. 서로 인수의 타입이 다르고 같은 이름의 함수를 만드는 것 외에 다른 방법으로 Function template을 사용할 수 있다. 이를 통해 오버헤드를 줄일 수 있다. default 타입도 지정해줄 수 있고, 여러개를 만들 수도 있다. default 타입은 마지막에만 지정해줄 수 있다. 사용법 : template 예를 들어 integer에 대해서만 동작하는 함수 get_max가 있다고 해보자. 이 함수는 둘 중 큰 값을 반환한다. 이 때 double type 인수 5.8과 10.09를 넣으면 형 변환이 일어나고 10이 출력되게 된다. ( double형에서는 동작하지 않는다) #include using namespace..
exception handling c언어에서 error가 나면 stop으로 프로그램 종료가 되었다. 이건 별로 좋지 않은 현상이다. 에러시 다른 조치를 취할 수 있도록 해주기 위해 예외를 처리해주어야 한다. 그거를 하는 방법엔 try catch 라는 방법이 있다. 예를 들어, 할당된 영역을 벗어나서 메모리를 사용하려하면 런타임 에러가 뜬다. (Expression: vector subscript out of range) 디버깅 모드에서는 런타임 동안에 체크를 해서 보여준다. 코드를 상용화할 때에는 릴리즈 모드로 해야하는데 릴리즈 모드에서는 속도가 중요하기 때문에 메모리를 벗어난다던가 하는 것에 대해서는 체킹하는게 빠진다. 따라서 릴리즈 모드에서는 아래와 같은 에러가 나지 않고 콘솔에서 잘 실행 되는 것을 ..
text file은 열었을 때 사람 눈으로 읽을 수 있는 파일이다. ASCII 값으로 저장된다. binary file은 열었을 때 사람 눈으로 읽기 어려운 파일이다. hexa(binary) value로 저장된다. int main(){ ofstream of("binary.bin", ios::binary); int i = 15; //이렇게 쓰면 binary 파일이어도 아스키값으로 쓰임 //of
파일을 이용한 input, output을 작성해보자 헤더는 #include 이 필요하다. 파일을 읽을 때는 ifistream 클래스, 파일을 쓸 때는 ofstream 클래스를 사용해도 된다. fstream 클래스의 f라는 객체를 만들어 0~9 까지 숫자를 쓰는 코드이다. 읽거나 쓰는 것에 대한 모드를 지정해주어야한다. 이는 std::ios::out 이나 std::ios::in 으로 작성한다. 파일 쓰기> #include #include using namespace std; int main() { fstream f("test_1.txt", ios::out); if (!f) { cout
그림과 같은 구조로 클래스 3개가 있다고 생각해보자 class A { public: void iam() { cout
Inheritance 상속? 부모로부터 물려받는 것이다. 코드를 간결하게 짤 수 있다는 장점이 있다. 복사붙여넣기와 같은 개념이지만, 코드가 잘못되어 수정이 필요한 경우 번거로움이 있기 때문에 상속을 사용하는 것이 좋다. 하지만 아무리 자식이라도 부모의 private한 것은 건들 수 없다. 그래서 자식 직접적으로 변수를 접근하도록 만들어 주고 싶다면, 접근 지정자를 protected로 지정해주어야 한다. protected는 class 외부에서는 private과 같은 기능을 하고, 자기 자식(상속 받은)한테는 public과 같은 기능을 한다. 상속 받을 때 public을 적지 않고 class 자식이름 : 부모이름 으로 적으면 부모로부터 받아온 모든 변수,메소드를 private으로 묶어버린다. 즉, 클래스 ..
Friend function class 내에서 선언되함수가 아닌 외부 함수를 친구처럼 사용하겠다는 의미이다. 이는 private에 대한 개념을 무너뜨리는 것과 같다. read, write가 가능하다. //2차원 좌표를 표시하는 클래스 class Coord_2D { friend void outSideShowCoord(const Coord_2D& _c); private: int x; int y; public: Coord_2D(int _x, int _y): x(_x),y(_y){} void showCoord(); }; void Coord_2D::showCoord() { cout
Operator overloading operator는 산술 연산자(+, -, *, /), 비교 연산자(==, !=), 증감 연산자(++, --) 등을 의미하고, overloading은 원래 뜻에 새로운 뜻을 더해준다는 의미이다. 따라서 operator overloading은 객체를 메소드 없이 연산자를 통해 바로 계산을 할 수 있도록 만들어 주는 방법이다. 사용방법 : " operator 연산자 "를 함수 이름으로 사용하여 만든다. 산술 연산자 벡터 더하기를 하고 싶다고 가정을 해보자 우선 아래 코드는 2차원 좌표를 표시하는 클래스를 간단하게 생성하고 a와 b 객체가 잘 만들어졌음을 확인할 수 있다. #include using namespace std; //2차원 좌표를 표시하는 클래스 class Co..