업로드중..
lower_bound : algorithm 라이브러리에 있는 내장함수로, 주어진 수와 같거나 큰 수들 중 첫번째 인덱스 값을 반환 upper_bound : algorithm 라이브러리에 있는 내장함수로, 주어진 수와 큰 수들 중 첫번째 인덱스 값을 반환 vector에서 원하는 수의 개수 구하기
container: 데이터의 저장 및 관리를 위한 클래스임의의 위치에 삽입, 삭제데이터를 순차적으로 저장일반적인 자료구조와 동일한 형태자료 양이 적고 검색 속도가 중요하지 않을 때 사용ex. vector, list, deque일정 규칙에 따라 자료를 조직화하여 저장자료
STL algorithm 라이브러리는 STL 자료구조를 다루는데 필요한 편리한 메소드들을 제고하고 있다. STL 알고리즘 라이브러리에 있는 함수들은 대체로 다음과 같은 두 가지 형태를 띄고 있다.vector와 deque만 가능일반적인 정렬예시기본적으로 오름차순 정렬Fu
우선순위에 따라 queue를 정렬1) 선언priority_queue<자료형, Container, 비교함수> 변수명priority_queue<자료형> 변수명2) 추가pq.push(element)3) 삭제pq.pop()4) 맨앞 원소 반환int a = pq.to
namespace: 정의된 객체가 어디 소속인지 지정하는 역할아래 코드처럼 같은 이름의 함수라도 namespace를 사용해 구분 가능서로 다른 코드 모듈이 충돌에 대한 걱정 없이 변수, 메서드 등에 대한 원하는 이름을 사용 가능함이름 없는 이름 공간을 설정할 경우, 정
참조자: 별명, 즉 또다른 이름으로 반드시 정의 시 누구의 별명이 될 것인지 지정해야 한다.(한번 별명이 되면 절대로 다른 이의 별명이 될 수 없음)레퍼런스는 메모리 공간 속에 존재하지 않을 수 있음레퍼런스를 위해 새로운 공간을 할당할 필요가 없을 수도 있음레퍼런스(r
c에서는 malloc과 free를 c++에서는 new와 delete를 사용해 메모리를 관리한다. 프로그램이 정확하게 실행되기 위해서는 컴파일 시에 모든 변수의 주소값이 확정되어야만 한다. 하지만, 이를 위해서는 프로그램에 많은 제약이 따르기 때문에 프로그램 실행 시에
인스턴스 변수(instance variable)들과 인스턴스 메소드(instance method)들의 집합객체를 찍어내는 설계도멤버 변수(member variable)들과 멤버 함수(member function)들의 집합public : 외부에서 접근 가능protecte
인자로 들어오는 변수의 타입에 따라 이름이 같은 함수들 중 적합한 함수를 호출해 주는 기능실행결과1\. 자신의 타입과 정확히 일치하는 함수를 찾음2\. 정확히 일치하는 타입이 없는 경우 아래와 같은 형변환을 통해 일치하는 함수를 찾음char, unsigned char,
new로 생성해준 것을 delete로 할당 해제 해주는 것과 마찬가지로 메모리 누수(Memory Leak)을 방지하기 위해 소멸자를 호출한다.소멸자 내용에는 delete해야 되는 것들을 작성소멸자는 객체가 포함된 scope가 닫힐 때 자동으로 호출소멸자 사용법컴파일러
생성자 호출과 동시에 멤버 변수들을 초기화 가능하다.초기화 리스트를 사용하지 않으면 생성을 먼저하고 그 다음에 대입을 수행생성 즉시 초기화(복사 생성자 호출)생성후 초기화(디폴트 생성자 호출 + 대입 수행)상수와 레퍼런스는 생성과 동시에 초기화가 되어야 함클래스 하나에
기존 C언어에서는 문자열을 나타내기 위해 널 종료 문자열(Null-terstd::minating string)이라는 개념을 도입해 문자열 끝에 Null문자를 붙여 문자열을 나타내는 방식을 사용했다.하지만 C언어 문자열 사용 시 문자열의 크기를 바꾼다던지, 뒤에 다른 문
함수 호출시 인자의 암시적 형변환을 금지함멤버 변수를 mutable로 선언하였다면 const 함수에서도 이들 값을 바꿀 수 있음
C++에서는 사용자 정의 연산자를 사용할 수 있다. ::범위지정, . 멤버지정, .\*멤버 포인터로 멤버 지정을 제외한 모든 연산자를 사용할 수 있다.이전에 구현한 compare함수를 사용하여 비교연산자를 구현복소수를 구현한 Complex 클래스에서 +연산자 함수를 구
클래스 내부에서 다른 클래스나 함수들을 friend로 정의할 수 있는데, friend로 정의된 클래스나 함수들은 원래 클래스의 private로 정의된 변수나 함수에 접근 가능하다friend는 짝사랑 같은 관계이기 때문에 클래스 A에서 클래스 B의 private 멤버에
기존 C언어에서의 캐스팅은 크게 컴파일러에서 알아서 캐스팅하는 암시적 캐스팅과 우리가 직접 캐스팅하라고 지정하는 명시적 캐스팅이 있었다. 하지만 명시적 캐스팅의 경우 말이 안되는 캐스팅의 경우에도 컴파일러가 오류를 발생시키지 않는다는 문제가 있다. 뿐만 아니라 가독성도
C언어 스타일의 문자열에서 불편한 요소를 개선한 클래스로 C++에서는 string클래스 사용을 지향한다.특징(빠른속도를 위한)짧은 문잘열에 대해서는 동적으로 메모리를 할당하지 않고 그냥 지역 변수로 보관문자열을 복사할 때 그 복사된 문자열의 내용이 바뀌지 않는 한 실제
c++에서 상속을 도입한 이유를 생각해보자. 단순히 똑같은 코드를 작성하는 것을 방지하는게 아닌 객체지향프로그래밍에서 추구하는 실제 객체의 추상화를 좀 더 효과적으로 하기 위함이다.c언어에서는 구조체 사이의 관계를 표현할 수 있는 방법이 없었다. 하지만 c++에서 상속
클래스의 상속을 사용함으로써 소멸자를 가상함수로 만들어야 한다. 아래 코드를 실행하고 문제점을 발견할 수 있다.실행결과Parent 포인터로 Child를 가리키니 소멸시 Child 소멸자가 호출되지 않음이를 통해 메모리 누수가 발생할 수 있음따라서 Parent 소멸자를
c++의 모든 입출력 클래스는 ios_base를 기반 클래스로 사용ios_base는 스트림의 입출력 형식 과련 데이터를 처리실제로 스트림 버퍼를 초기화스트림 버퍼: 데이터를 내보내거나 받아들이기 전에 임시로 저장하는 곳eof: 파일을 읽다가 끝에 도달했는지 확인하는 함
사용자가 원하는 타입을 넣어주면 해당 타입의 코드를 찍어내준다.위 코드의 클래스 부분을 보게되면 클래스에 대해 템플릿을 정의한 것을 볼 수 있음T: 템플릿 인자(어떠한 타입의 이름임)아래에 Class Vector가 오니 Vector클래스에 대한 템플릿을 명시템플릿으로
template <typename T, typename... Types>처럼 0개 이상의 템플릿 인자를 나타내는 것예제 코드두 print 함수의 위치를 바꿔쓴다면 컴파일 오류가 발생한다. 이는 컴파일 시에, 자신의 앞에 정의된 함수들 밖에 보지 못하기 때문이다.전
일반화 프로그래밍: 템플릿을 통해서 타입이 마치 인자 인것 처럼 사용하는 것템플릿을 사용하면 객체를 생성하지 않더라도, 타입에 어떠한 값을 부여할 수 있고, 그 타입들을 가지고 연산할 수 있다. 또한 타입은 반드시 커마일 타임에 확정되어야하니 컴파일 타임에 모든 연산이
컴파일러는 구조상 어떤 식별자를 보았을 때 '값'인지 '타입'인지 결정해야한다.위에서, 클래스 A에 대해 func함수를 특수화 한다면, t가 어떠한 int값이 되어 T::t\* p;가 단순히 클래스 A의 t와 p를 곱하는 식으로 해석된다.반면에, func함수가 클래스
임의 타입의 객체를 보관할 수 있는 컨테이너컨테이너에 보관된 원소에 접근할 수 있는 반복자반복자들을 가지고 일련의 작업을 수행하는 알고리즘C++STL에서 컨테이너는 크게 시퀀스 컨테이너와 연관 컨테이너로 나뉜다.시퀀스는 vector, list, deque가 정의되어있다
시퀀스 컨테이너와는 다르게 키(key)-값(value) 구조를 가져 키 값을 넣으면 이에 대응되는 값을 돌려준다.원소를 추가하기 위한 함수원소를 추가할 때 정렬된 상태를 유지하며 추가함시퀀스 컨테이너 처럼 어디에 추가할지에 대한 정보가 없음위치가 아닌 존재유무가 중요한
프로그래밍에 도움이 되는 여러 작업을 쉽게할 수 있도록 도와주는 라이브러리로 주로 정렬알고리즘이나 컨테이너 관련 작업들이 있다.조건이 없는 경우조건이 있는 경우sort: 일반적인 정렬 O(nlogn)stable_sort: 정렬을 하되 원소들 간의 순서를 보존 O(n(l
std::string은 basic_string이라는 클래스 템플릿의 인스턴스화 버전이다.basic_stringCharT 타입의 객체들을 메모리에 연속적으로 저장하고 여러가지 문자열 연산들을 지원해주는 클래스Traints: 주어진 CharT문자들에 대해 기본적인 문자열
문법 상 문제가 없지만, 실행시 오류가 발생했을 때 즉, 정상적인 상황에서 벗어난 모든 예외적인 상황들을 예외(exception)이라고 부름조건문을 사용해 예외 상황을 인지 및 처리함수가 깊어질 수록 귀찮아짐예외가 발생했다는 사실을 throw 문을 통해 명시적으로 나타
C++에서는 똑똑한 컴파일러가 복사 생략을 해도 되는 경우에, 복사를 생략해버린다.컴파일러가 복사 생략을 하는 경우함수 내부에서 생성된 객체를 그래도 리턴할 때 할 수도 있음C++17부터 일부의 경우에 대해 방드시 복사생략을 해야 됨좌측값(lvalue): 주소값을 취할
좌측값을 우측값으로 바꾸어 줌C++ 11 부터 <utility> 라이브러리에서 제공 예제 코드일반적인 Swap함수3번의 복사를 통한 swap 방식temp: 복사 생성자 호출 a: 복사 연산자 호출b: 복사 연산자 호출Move를 이용한 Swap 함수3번의 이동을 통
c++이후에 나온 많은 언어들은 대부분 가비지 콜렉터라 불리는 자원 청소기가 기본적으로 내장되어 있음GC: 프로그램 상에서 더 이상 쓰지 않는 자원을 자동으로 해제해 주는 역할c++에서 한 번 획득한 자원은 직접 해제해주지 않는 이상 프로그램이 종료되기 전 까지 영원히
특정 자원을 몇 개의 객체에서 가리키는지를 추적한 뒤, 그 수가 0이되면 비로소 해제시켜주는 방식의 포인터하나의 자원을 여러 객체에서 사용하는 경우 사용가능예시 코드shared_ptr내부에 참조 개수를 저장한다면 생기는 문제아래 코드의 경우 p1에 저장된 참조 개수를
호출 할 수 있는 모든 것을 의미C++에서는 ()를 붙여서 호출할 수 있는 모든 것을 의미연산자 ()예제코드실행 결과람다함수예제 코드실행결과Callable들을 객체의 형태로 보관할 수 있는 클래스 제공함수 뿐만 아니라 모든 Callable들을 보관할 수 있는 객체예시
프로세스: 운영체제에서 실행되는 프로그램의 최소 단위이는 cpu의 코어에서 실행 됨cpu는 하나의 코어가 다양한 기능을 하기 위해 context switching기술을 사용함다음으로 무슨 프로그램으로 스위치 할지는 운영체제의 스케줄러가 알아서 결정쓰레드cpu 코어에서
서로 다른 쓰레드에서 같은 자원을 사용할 때 발생하는 문제경쟁상태가 발생하는 예제 코드(counter+=1 부분)출력값(40000이 아니다!)Counter 최종 값 : 26459cpu: 컴퓨터의 모든 연산이 발생하는 두뇌레지스터(register)에 데이터를 기록한 뒤
CPU는 RAM에서 데이터를 읽어 오는데 이들은 물리적으로 떨어져있기 때문에 많은 시간이 걸림따라서 CPU의 입장에선 데이터를 읽어오는동안 아무 것도 못하기 때문에 손해임위의 문제를 해결하기 위해 cpu안에 조그마한 메모리를 넣어둔 것cpu에서 연산을 수행하는 부분과
1. 동기와 비동기 실행 하드 디스크에서 파일을 읽는다고 생각할 때 임의의 위치에 쓰여진 파일을 읽는데 오랜 시간이 걸린다. 이는 read함수가 파일이 하드 디스크에서 읽어지는 동안 기다리기 때문에 read 함수는 파일 읽기가 끝나기 전 까지 리턴하지 않고, CPU는
여러 개의 쓰레드들이 대기하고 있다가, 할 일이 들어오면, 대기하고 있던 쓰레드들 중 하나가 이를 받아서 실행하는 디자인 패턴보통 처리해야 될 작업들을 큐(queue)에 추가하는 방식으로 사용가장 먼저 추가된 작업을 가장 먼저 시작하기 위함쓰레드들을 보관할 컨테이너wo
C++에서 ()은 함수의 인자들을 정의하는데도 사용되고 일반적인 객체의 생성자를 호출할 때도 사용되기 때문에 컴파일러는 함수의 정의처럼 보이는 것들은 모두 함수의 정의로 해석한다. 따라서 아래의 코드처럼 생성자를 호출하였지만 함수의 정으로 해석되는 문제가 발생한다. 이
객체나 함수 앞에 붙일 수 있음해당 객체나 함수의 리턴값을 컴파일 타임에 알 수 있다는 의미상수식: 컴파일러가 컴파일 타임에 어떠한 식의 값을 결정할 수 있는 것예시 코드const로 정의된 상수들을 굳이 컴파일 타임에 그 값을 알 필요가 없음constexpr은 오른쪽에
decltype이름의 함수처럼 사용됨타입을 알고자 하는 식의 타입으로 치환전달된 식이 괄호로 둘러쌓이지 않은 식별자 표현식이어야 함식별자 표현식이 아닌 식을 전달한다면 해당 식의 값의 종류에 따라 다르게 치환됨C++에는 5가지의 값 카테고리가 존재함두 가지의 유무를 통
함수와 비슷하지만 값에 대한 연산이 아닌 타입에 대한 연산을 수행음수인지 판별하는 함수 예시 코드실행 결과인자로 전달된 타입이 클래스인지 아닌지 확인하는 메타 함수detail::test를 통해 T의 타입을 확인하고 해당 타입의 size를 통해 클래스인지 확인함적절한te
#define을 사용하는 것이 과연 바람직할까? 그렇지 않다면 어떤 것을 사용해야 할까?
왜 float로 틀린문제를 double로 바꾸면 정답처리가 되는 것일까?