Language
-
🔗프로그래머스 | 평균값 구하기 문제를 풀려다가, STL 라이브러리들이 무엇이 있는지도 알아보기 위해 찾아보니, 누적 합계를 구해주는 함수, std::accumulate()가 있었습니다. C++ 17에서 추가된 함수로, 헤더파일을 #include 해줘야 사용 가능합니다. #include std::accumulate(시작 위치, 끝 위치 - 1, 초기값); 해당 함수를 통해 얻은 반환값은 초기값의 데이터 타입을 따라간다고 하네요. 오버플로우 방지를 위해 long 타입을 쓰고 싶으신 분들은 초기값에 0이 아닌 0L을 줘야하겠습니다. 평균값 구하기 문제 소스코드 #include #include #include using namespace std; double solution(vector numbers) { i..
[C++ 17] 누적 합계 구하기 - std::accumulate()🔗프로그래머스 | 평균값 구하기 문제를 풀려다가, STL 라이브러리들이 무엇이 있는지도 알아보기 위해 찾아보니, 누적 합계를 구해주는 함수, std::accumulate()가 있었습니다. C++ 17에서 추가된 함수로, 헤더파일을 #include 해줘야 사용 가능합니다. #include std::accumulate(시작 위치, 끝 위치 - 1, 초기값); 해당 함수를 통해 얻은 반환값은 초기값의 데이터 타입을 따라간다고 하네요. 오버플로우 방지를 위해 long 타입을 쓰고 싶으신 분들은 초기값에 0이 아닌 0L을 줘야하겠습니다. 평균값 구하기 문제 소스코드 #include #include #include using namespace std; double solution(vector numbers) { i..
2023.01.29 -
C++에서 기본적으로 제공하는 자료형들(char, int, float 등등)은 명시적 기본 생성자를 통해 0 또는 False로 초기화를 할 수 있습니다. int x = int(); 이것은 템플릿 자료형에서도 사용이 가능합니다. template void Test() { T variable = T(); } 템플릿 클래스를 정의할 때, 멤버 변수 초기화 시 이 방법을 활용할 수 있습니다. template class Test { public: Test() : _data(T()) { } // 템플릿 멤버 변수 기본형으로 초기화 private: T _data; };
[C++] 기본 자료형과 템플릿의 생성자 초기화C++에서 기본적으로 제공하는 자료형들(char, int, float 등등)은 명시적 기본 생성자를 통해 0 또는 False로 초기화를 할 수 있습니다. int x = int(); 이것은 템플릿 자료형에서도 사용이 가능합니다. template void Test() { T variable = T(); } 템플릿 클래스를 정의할 때, 멤버 변수 초기화 시 이 방법을 활용할 수 있습니다. template class Test { public: Test() : _data(T()) { } // 템플릿 멤버 변수 기본형으로 초기화 private: T _data; };
2023.01.25 -
추상 클래스의 필요성 class Monster { public: Monster() {} virtual ~Monster() {} virtual void Attack() }; 슬라임, 리본돼지 등의 몬스터 클래스를 만들 예정인데, 이들은 모두 공격(Attack)이라는 메소드를 가진다. 이들은 저마다 다른 공격을 구사한다. 따라서, 슬라임과 리본돼지의 부모 클래스로 Monster 클래스를 만들어서 Attack() 메소드를 만들어 주었다. 하지만 이 Monster 클래스는 공통된 멤버를 정의하기 위한 용도일 뿐이지, 실제 객체 생성은 요구되지 않는다. 가상 함수로도 공격 메소드의 다형성을 구현할 수 있지만, 프로그래머가 오버라이드 하는 걸 까먹을 수도 있다. 다음과 같은 내용들을 만족하는 방법이 있었으면 좋겠다..
[C++] 추상 클래스(abstract class)추상 클래스의 필요성 class Monster { public: Monster() {} virtual ~Monster() {} virtual void Attack() }; 슬라임, 리본돼지 등의 몬스터 클래스를 만들 예정인데, 이들은 모두 공격(Attack)이라는 메소드를 가진다. 이들은 저마다 다른 공격을 구사한다. 따라서, 슬라임과 리본돼지의 부모 클래스로 Monster 클래스를 만들어서 Attack() 메소드를 만들어 주었다. 하지만 이 Monster 클래스는 공통된 멤버를 정의하기 위한 용도일 뿐이지, 실제 객체 생성은 요구되지 않는다. 가상 함수로도 공격 메소드의 다형성을 구현할 수 있지만, 프로그래머가 오버라이드 하는 걸 까먹을 수도 있다. 다음과 같은 내용들을 만족하는 방법이 있었으면 좋겠다..
2022.07.07 -
정적 바인딩(Static binding)이 오버라이드 메소드에 미치는 영향 객체 지향 언어를 통해 프로그래밍을 하다 보면, 부모 클래스로 자식 클래스를 가리키는 업 캐스팅(Upcasting)을 사용할 때가 많습니다. Parent* obj = new Child(); 우리 입장에서는 부모 클래스 포인터로 자식 클래스 객체를 가리키고 있구나라고 알 수 있지만, 컴퓨터 입장에서는 부모 클래스의 포인터이므로 당연히 부모 클래스 객체를 가리키고 있다고 생각합니다. 따라서, 자식 클래스에 오버라이딩(Overriding)된 메소드가 있다면 여기에서 문제가 발생하게 됩니다. Parent* p = new Parent(); Parent* c = new Child(); p->Function(); // Parent 클래스의 F..
[C++] 클래스 상속 시, 소멸자를 가상 함수(Virtual)로 만들어야 하는 이유정적 바인딩(Static binding)이 오버라이드 메소드에 미치는 영향 객체 지향 언어를 통해 프로그래밍을 하다 보면, 부모 클래스로 자식 클래스를 가리키는 업 캐스팅(Upcasting)을 사용할 때가 많습니다. Parent* obj = new Child(); 우리 입장에서는 부모 클래스 포인터로 자식 클래스 객체를 가리키고 있구나라고 알 수 있지만, 컴퓨터 입장에서는 부모 클래스의 포인터이므로 당연히 부모 클래스 객체를 가리키고 있다고 생각합니다. 따라서, 자식 클래스에 오버라이딩(Overriding)된 메소드가 있다면 여기에서 문제가 발생하게 됩니다. Parent* p = new Parent(); Parent* c = new Child(); p->Function(); // Parent 클래스의 F..
2022.07.07 -
파일 열기 (Open) open() 함수를 이용하여 파일을 열 수 있습니다. 읽기 전용으로 열고 싶으면 'r', 쓰기 전용으로 열고 싶으면 'w'을 인자로 줍니다. _file = open(file = "ex1.csv", mode = 'r') ... # 작업을 마쳤다면 닫아줍니다. _file.close() 파일 읽기 (Read) readline() 메소드를 이용하여 한 줄씩 차례대로 읽을 수 있습니다. _file.readline() # 'a, b, c, d, message\n' _file.readline() # '1, 2, 3, 4, hello\n' _file.readline() # '5, 6, 7, 8, world\n' _file.readline() # '9, 10, 11, 12, foo\n' _file..
[Python] 파일 입출력 (File I/O) + with 문법파일 열기 (Open) open() 함수를 이용하여 파일을 열 수 있습니다. 읽기 전용으로 열고 싶으면 'r', 쓰기 전용으로 열고 싶으면 'w'을 인자로 줍니다. _file = open(file = "ex1.csv", mode = 'r') ... # 작업을 마쳤다면 닫아줍니다. _file.close() 파일 읽기 (Read) readline() 메소드를 이용하여 한 줄씩 차례대로 읽을 수 있습니다. _file.readline() # 'a, b, c, d, message\n' _file.readline() # '1, 2, 3, 4, hello\n' _file.readline() # '5, 6, 7, 8, world\n' _file.readline() # '9, 10, 11, 12, foo\n' _file..
2022.06.13 -
Generator Iterator의 특별한 종류 각 멤버를 생성하는 방법을 저장한 후, 반복을 통해 요청될 때만 각 멤버를 한 번에 하나씩 생성합니다. 그렇기에 많은 메모리 공간이 필요하지 않습니다. for문에서 자주 쓰이는 range()가 for 문에서 활용될 때는 Generator로 변환되어 실행됩니다. [0, 1, 2, 3, 4] # 0, 1, 2, 3, 4 모든 값을 메모리에 저장 range(5) # 0 ~ 4의 수열을 생성하는데 필요한 명령만 저장 Generator 만들기 return 키워드 대신, yield 키워드를 이용하면 만들 수 있습니다. def EventNumbers(): n = 1 while True: if (n % 2 == 0) : yield n n += 1 g = EvenNumbe..
[Python] Generator, Enumerate, ZipGenerator Iterator의 특별한 종류 각 멤버를 생성하는 방법을 저장한 후, 반복을 통해 요청될 때만 각 멤버를 한 번에 하나씩 생성합니다. 그렇기에 많은 메모리 공간이 필요하지 않습니다. for문에서 자주 쓰이는 range()가 for 문에서 활용될 때는 Generator로 변환되어 실행됩니다. [0, 1, 2, 3, 4] # 0, 1, 2, 3, 4 모든 값을 메모리에 저장 range(5) # 0 ~ 4의 수열을 생성하는데 필요한 명령만 저장 Generator 만들기 return 키워드 대신, yield 키워드를 이용하면 만들 수 있습니다. def EventNumbers(): n = 1 while True: if (n % 2 == 0) : yield n n += 1 g = EvenNumbe..
2022.06.12 -
Iterables 기본 설명 iterable 또는 interable container는 한 번에 하나씩 멤버를 반환할 수 있는 모든 Python 객체 for 문에서 반복을 사용할 수 있도록 해줍니다. for 문에서 활용될 때, Python 내부적으로는 iter() 함수를 이용하여 Iterator라는 객체를 반환하여 사용합니다. Iterator는 next() 함수를 이용하여 다음 멤버를 반환할 수 있습니다. studentList = ['Tom', 'Jack', 'Jane', 'Susan'] iteratorObject = iter(studentList) # iterator 생성 print(next(iteratorObject)) # 'Tom' print(next(iteratorObject)) # 'Jack' ..
[Python] Iterable, IteratorIterables 기본 설명 iterable 또는 interable container는 한 번에 하나씩 멤버를 반환할 수 있는 모든 Python 객체 for 문에서 반복을 사용할 수 있도록 해줍니다. for 문에서 활용될 때, Python 내부적으로는 iter() 함수를 이용하여 Iterator라는 객체를 반환하여 사용합니다. Iterator는 next() 함수를 이용하여 다음 멤버를 반환할 수 있습니다. studentList = ['Tom', 'Jack', 'Jane', 'Susan'] iteratorObject = iter(studentList) # iterator 생성 print(next(iteratorObject)) # 'Tom' print(next(iteratorObject)) # 'Jack' ..
2022.06.12 -
Lambda Expression 개념 무명 함수(Anonymous function)을 만들 때 사용하며, 특별한 이름이 없는 1회성 함수를 만들 때 사용한다. 함수를 선언하는 def 키워드 대신, lambda 키워드를 사용하여 선언한다. lambda arguments : expression 사용법 다음 두 코드는 동일한 기능을 수행하는 코드이다. # 일반 함수 생성 def AddPlusOne(x, y) : return x + y + 1 # 람다식 AddPlusOne = lambda x, y : x + y + 1 실제로 사용해보면 다음과 같다. AddPlusOne = lambda x, y : x + y + 1 result = AddPlusOne(1, 2) print(result) # 3 출력 (lambda..
[Python] Lambda 식Lambda Expression 개념 무명 함수(Anonymous function)을 만들 때 사용하며, 특별한 이름이 없는 1회성 함수를 만들 때 사용한다. 함수를 선언하는 def 키워드 대신, lambda 키워드를 사용하여 선언한다. lambda arguments : expression 사용법 다음 두 코드는 동일한 기능을 수행하는 코드이다. # 일반 함수 생성 def AddPlusOne(x, y) : return x + y + 1 # 람다식 AddPlusOne = lambda x, y : x + y + 1 실제로 사용해보면 다음과 같다. AddPlusOne = lambda x, y : x + y + 1 result = AddPlusOne(1, 2) print(result) # 3 출력 (lambda..
2022.06.12