안녕하세요, class의 멤버함수를 specialization하기 위해서 상속을 받아 구현하는 부분에서 이해가 되지 않아 질문드립니다. 강의에서는 아래와 같이 specialization 하려하는 멤버함수가 포함된 class를 base class로 변경 후 이를 상속받는 class를 하나 정의합니다. 이 이유가 무엇인가요? 'char' 형 이외에 대해서는 base class와 똑같이 기능하게 하기 위해서 인가요? 명확하게 이해가 되지 않아 질문드립니다. 바쁘시겠지만 답변해주시면 공부하는데 큰 도움이 될 것 같습니다. 감사합니다! template<typename T, int size> class StaticArray_BASE { private: T m_array[size]; public: T* getArray() { return m_array; } T& operator[](int index) { return m_array[index]; } void print() { for (int count = 0; count < size; count++) cout << (*this)[count] << ' '; cout << endl; } }; template<typename T, int size> class StaticArray :public StaticArray_BASE<T, size> { };
시간복잡도가... 풀이와 같이 하면 j = 1일때 n번 j = 2일때 n/2번 j = 3일때 n/3번 … j = n일때 n/n번 즉 total n * (1 + 1/2+1/3+…+1/n) 를 계산한 것이 시간복잡도가 되는것 맞나요 ? 아직 미흡해서 질문 남깁니다
선생님 이런 질문 드려서 정말 죄송합니다. 그렇지만 컴맹인 제가 기본 c언어 문법부터 선생님 강의만 믿고 따라왔습니다. 그런데 그쪽에서도 여기서도 설명해주시지 않았던 , 나오지 않던 cin?cout? std::vector 이나 #include <vector> 이런것들이 나오니 너무 당황스럽습니다. 죄송하지만 어떻게 하면 따라갈수 있을까요 ,,? 어떤 강의를 듣고 오라면 듣고 오겠습니다 ㅜㅜㅜ 따라가고 싶은데 모르는 내용에 너무 답답해서 질문 남겨봅니다 ㅜㅜ
저는 코드를 다음과같이 작성을 해보았는데요, 40점이 뜨고, 문제점이 뭔지도 알고 있습니다. 일단 저는 강의를 듣기 전에 코드를 작성해보는 편입니다. 제 코드는 무조건 반드시 1일차의 상담을 선택하는 상황으로 가지가 계속 뻗어나가게만 이루어져 있습니다. 그래서 1일차의 상담을 선택했을때 분기가 모두 끝나는 것도 디버깅으로 확인을 했는데 그 이후 몇시간을 고민했는데도 풀리지 않네요. N의 범위를 넘어가지 않으면서 2일차 강의, 3일차 강의를 선택하는 모든 경우의 수 까지도 고려하고 싶은데 거기서 손을 쓸 수가 없습니다. 이 문제를 해결하려면 제 코드에 어디를 손봐야할까요?ㅜㅜ #include<stdio.h> #include<iostream> #include<stdlib.h> using namespace std; int* T; int* P; int N; int Tindex = 0; int Total = 0; int totalarray[100]; int cnt = 0; void DFS(int Tindex, int Total) { if (Tindex + T[Tindex] > N) { totalarray[cnt++] = Total; return; } else { DFS(Tindex + T[Tindex], Total + P[Tindex + T[Tindex]]); } } int main() { scanf("%d", &N); T = (int*)malloc(sizeof(int) * (N + 1)); P = (int*)malloc(sizeof(int) * (N + 1)); for (int i = 1; i < N+1; i++) { scanf("%d %d", &T[i], &P[i]); } T[0] = 1; P[0] = 0; DFS(0, 0); //DFS(1, 0); int max = 0; for (int i = 0; i < 100; i++) { if (max < totalarray[i]) { max = totalarray[i]; } } printf("%d", max); }
using으로 타입을 정의하실 때 typedef와는 다르게 using check_fcn_t = bool(*)(const int&);로 하셨는데 using check_fcn_t = bool(*check_fcn_t)(const int&); 에서 check_fcn_t을 빼지 않았을 때 bool(*)의 모양으로 만들라는 형태의 에러가 발생했는데 모양이 왜 이렇게 되는 것인지 아무리 생각해봐도 잘 모르겠어서 질문드립니다.
Q1) "클래스 Person을 지우려 할 때, 맴버 변수인 m_partner도 지우려고 시도할텐데, 문제는 count가 되서 지울수가 없다." 라고 말씀해주셨는데, 그 count라는 게 어떤 걸 말씀하시는 건가요...? 추론1) shared_ptr의 특성상 내부적을 자신이 가리키고 있는 주소의 포인터가 몇 군데인지 세고 있다는 것에 대한 count를 말씀하시는 건가요? 만약 그렇담 그 count가 어째서 문제가 되나요..? 추론2) 혹시 라이브러리 <memory>에서 작동하는 원리에서 count라는 것이 있는데 그 곳에서 문제가 발생된다는 것이라면 아직 제 단계에서는 이해하기 어려워요.. 좀 더 쉽게 설명해주실 수 있으실까요? Q2) 좌우지간, 그 count라는 문제로 인하여 순환이 되지 않으니 weak_ptr를 써야한다는 것이 이번 강의의 내용인거죠?
안녕하세요. 수강생입니다. 따라해 보세요에서 응용을 하다보니 다음과 같은 현상이 일어났는데 궁금해서 질문 올립니다. 코드 A : int main() { int a(1), b(2), c(3); a = ++b = c; return 0; } 코드 B : int main() { int a(1), b(2), c(3); a = b++ = c; return 0; } 코드 A는 모두 값이 3으로 나오나 코드 B는 작동이 되지 않습니다. (b++)을 해도 컴파일이 되지 않는데 이유가 궁금합니다!
안녕하세요, 강의에서 Lecture class 내부에 아래와 같이 함수를 정의하고, parameter형태는 아래와 같은데요, void assignTeacher(const Teacher & const teacher_input) {} 왜 const Teacher & teacher_input으로 사용하지 않고, const Teacher & const teacher_input 형태로 작성하셨는지 문의드립니다. 위와 같이 const를 2번 사용하는 경우는 앞선 강의 중 pointer에서 예로 보여주시긴 하셨는데, reference에서는 위와같이 써야하는 이유를 모르겠습니다. reference variable이 주소값을 변수 내부에 가지고 있지 않고, de-referencing해서 사용하지도 않기때문입니다. 아래의 홈페이지에서도 "Does “X& const x” make any sense?" 에서 const는 redundant라고 설명하는데 강의에서는 왜 저런 형태로 사용하는지 문의드립니다. "https://isocpp.org/wiki/faq/const-correctness#const-ref-alt"
안녕하세요. 강의 정말 잘 듣고 있습니다. 템플릿을 부분적으로 특수화할때 상속을 받아서 void print()함수를 char타입에 대해 특수화를 해주셨잖아요. 그런데 앞 강의에서 member function을 특수화할때처럼 전체 부모 클래스를 상속받지 않고 그냥 print()함수만 char타입에 대해 특수화하면 안되나 해서 해봤는데 오류가 나더라구요. 즉, 강의에서 보여주셨던 부분을 주석처리하고 제가 member function부분만 특수화를 해봤는데.. template argument list must match the parameter list 라는 오류가 나더라구요. 앞 강의에서는 아래와 같은 member function 특수화할때 별 문제가 없었는데 무슨 차이인건가요? //template <int size> //class StaticArray<char, size> : public StaticArray_BASE<char, size> //{ //public: // void print() // { // for (int count = 0; count < size; ++count) // std::cout << (*this)[count]; // std::cout << endl; // } //}; template<int size> void StaticArray<char, size>::print() { for (int count = 0; count < size; ++count) std::cout << *(this)[count]; std::cout << std::endl; }
//header //main cpp //test cpp // problem (영상 32:20와 동일함) LNK2005와 LNK1169입니다. 영상 (32:20)과 같은 문제가 발생했습니다. 추가된 파일도 없으며, (43:20)의 과정을 그대로 따라해보았는데 발생했습니다. 반복된 함수도 없는 것으로 보아 코딩에 문제점도 여전히 찾지 못하고 있습니다. 답변자님 매번 감사합니다.
int main() { Fruit apple(APPLE); if (apple.getType == APPLE) //강의 코드 //if(apple.getType() == APPLE) 수정 후 코드 { cout << "Apple" << endl; } return 0; } apple.getType은 compile eror를 발생시켜서 apple.getType()으로 수정해줘야 할것같습니다.
(바쁘면 안읽어도 되는 글 강의 후기) 질문칸에 안올렸다고 뭐라하진 마세요 그냥 강의 확인하다가 손이 따라가는대로 적었습니다. +--------------------------------------------------------------------------------------------------------------------+ 이 강의를 언제 구입한지는 기억이 안 나는데 그래픽을 조금 더 자세히 알고 싶어서 이 강의를 보던 도중 고속 컴퓨팅에 대해 공부해 보라는 (홍) (정) (모) 쌤의 권유 때문인지도 모르겠습니다. 처음에 강의를 볼 때는 저는 파이썬도 해봤고 자바 프로젝트도 해봤고 C언어를 공부했으나 프로젝트를 해보지 않았던 터였고Houdini 라는 프로그램에서 오브젝트 개체를 수많은 네트워크로 전송시키면서 유체가 되었다가 불꽃이 되었다가 랜더러가 요구하는 쉐이딩 파라미터도 넘겨줘 봤으니까C++만 할 줄 알면 방구석에 박혀있던 PBRT 라는 랜더링 책을 이해할 줄 알았습니다. 강의를 마치자마자 컴공 지식이 없던 저로서는 책에서 말하는 멀티스레딩 예제를 해봐도 실전도입은 굉장히 어려웠고인텔 TBB openMP 등의 내용이 빌드마저도 화가 치밀어 올랐습니다. 그래도 즐거움에 붙잡고는 있었지만, 각개 격파 또한 되지 않았던 과제였었습니다. 한동안 포기하고 있다가 조금 더 간접적으로 나를 이해시킬 수 있는 방법이 없던 터라 계획 없이 주저앉고 말았죠. 포인터 끊김이라고나 할까요 그러다 Houdini openCL 이라는 기능을 소프트웨어에서 지원한다길래 자세히 알기위해 찾던도중... 고속 컴퓨팅을 해보라는 권유가 홍정모쌤의 말씀이 생각났고 이것을 알기 위해선 병렬 프로그래밍을 공부해야 했는데 마땅히 비슷한 주제로 이 키워드를 따라가다 보니 CUDA 프로그래밍이 프로세스가 비슷해 보여서 예제와 유다시티에서 나오는 엔비디아 강의를 억지로 꾸역꾸역 삼켜서 깃허브 예제를 돌려도 보았습니다. 그러다 보니 openCL 에서 개념이 전문가 정도로는 아니지만 기본적인 예제코딩과 깃허브 자료를 그나마 돌려가면서 이해가 시작되었습니다. 비생산적인 코딩의 연속이였습니다. 책 속에서 말하는 몬테카를로 기법도 그래픽에서 근거해서 이해하려면 배경이 없으면 이해하기 힘들어서 딥러닝 강의와 시스템프로그래밍 OS부터 난공불락의 문제를 아래와 위에서 공격하며 땜질해서 듣던도중 우연히 알게 되었고 근삿값에 도달하기 위해 교수님 강의도 보다 보니 유튜브가 알아서 학습하게 되었습니다. 저에게 맞는 수학적 지식을 보강하기 위해 변형되어갈 때쯤에 비로소 남이 만들어 놓은 설계를 그나마 읽어내기 시작했습니다. Houdini_HDK / openGL / 불칸 / TBB / OpenMP / C++멀티쓰레드 / 유체엔진 예제 / GAN 시스템 프로그래밍 터미널 유체역학 강의 열역학 강의 기타 등등을 따로따로 하나씩 다 분해해서 따라 해보고 나니 그때서야 이 책을 (그나마) 읽어 나가고 있고 정신이 나태해지고 방향을 잃어가던 중 자포자기로 언리얼 자습을 빈둥빈둥 놀면서 보다가 C++ 강의를 오랜만에 다시 보게 되었습니다. 이 강의가 숲을 이야기 하려던 것을 조금 더 가깝게 느껴집니다. 계속 참고하면서 이 강의는 사용하려고요 제가 샀을 때는 6만 원대인데 지금은 만 원대라 쫌…. 불편하내요 쌤; 엣헴;; 그래픽에서 연기를 만들기 위해 수많은 VDB박셀에 가두었던 솜방망이 포인트 폴리곤 attribute 들이 결국엔 점으로 컨트롤이 가능하지만 데이터를 어떻게 소싱을 하느냐의 주제로 새로운 라이브러리로 들어오는 것을 느끼고 아무리 어려운 그래픽 알고리즘도 결국 수학적 모델링을 근거로 한 페이크이기 때문에 두렵지는 않습니다. 모르면 찾으면 되니까요 다만 아직도 대단한 그래픽을 하는 사람으로는 거듭나지 못했내요 죽을 때까지 무언가를 할 것은 생긴 거 같은 게 전부인 거 같습니다. 결론은: 강의 좋다구요 ㅇㅇ! +--------------------------------------------------------------------------------------------------------------------+ 느낀 점: 사람은 숟가락을 질문하고 알기 위해선 결국엔 지구에 살아보지 않은 인간이라는 존재라도 또는 그러지 아니한 존재라면 인간의 생활적 패턴을 가진 배경의 사람이 되어보아야 C++이란 숟가락은 그저 밥을 퍼먹는 도구일 뿐이야 라고 말해주면 알 수 있지만 그것을 모르는 인간의 시점이 아닌 다른 시점으로 무언가를 설명하기 위해선 먹는 행위와 인간이 어떻게 생존하는지에 따른 배경과 문화를 알아야 하는 것도 있고 왜 하필 팔로 먹어야 효율이 높고 왜 숟가락은 그렇게 생겼으며 그 비율이 황금비율인지를 설명을 해줘야 그 음식을 먹는다는 행위를 설명할 수가 있다고 생각합니다. 저는 그것을 하기 위해 쓸모없는 시간을 보낸 것도 같지만 가장 행복한 시간을 이 강의를 시작으로 보냈다고 생각합니다
저 또한 홍정모 선생님의 영상강의를 보며 배우는중인 C++ 신생아 인데요, 매 강의를 다 듣고난 뒤, 여러 사람들의 질답란을 읽으며 새롭게 알게되는 부분이 많이 있었습니다 그래서 저 처럼 질답란을 적극 활용하여 공부하시는 분들께 이번엔 제가 아는 것을 나누어주고 싶어 이렇게 글을 적어봅니다! 도움이 되셨으면 좋겠습니다! 부담갖지 마시고 재미로 읽으셨으면 좋겠습니다 :) <정리> 이번강의 switch - case - break (- default - break) 문법은 어떤 변수를 switch(조건) 조건 자리에 넣어 case(상수) 상수와 대조하여 변수와 상수가 같은(==) 값일 경우, 조건에 해당하는 case 의 코드를 실행시키고자 할 때 쓰이는 문법 입니다 오늘의 코드를 사람과 가까운 고수준 언어 위의 '고오오오오수준 언어' 로 간단히 보면 이런 형식입니다 switch (변수) { case (상수 ex==0) : { // 변수 == 0 일 때 동작할 코드작성 } break; case (상수 ex==1) : { // 변수 == 1 일 때 동작할 코드작성 } break; . . . default: { //case에서 찾는 값이 없을때 동작. if문의 else와 같은 기능 } break; } 그리고 앞전 강의에서 배운 enum문(열거형) , enum class문(영역 제한 열거형) 열거체들은 상수에 이름을 부여해주는 기능 입니다! 그래서 switch 문과 enum문은 함께 응용되어 많이 사용됩니다. <활용> 이렇게 Colors 라는 이름의 enum 문을 작성하면 상수 0 은 BLACK 이라는 이름을 갖게 되고, 상수 1 은 WHITE 이라는 이름을 갖게 되고, 상수2 는 RED 라는 이름을 갖게 되고, (3 == GREEN, 4 ==BLUE) cin, enum class, switch를 활용 하여 이런 재밌는 코드를 작성하는 것이 가능해지게 됩니다! 사용자가 0을 입력하면 Black, 1을 입력하면 white 를, 사용자가 입력한 값이 case에서 찾을 수 없을 경우 '잘못 입력했다'고 콘솔창에 출력하는 코드입니다 빨간 밑줄은 명시적 형변환을 해주고 있는 모습입니다 형변환을 안해주면 아래와 같은 오류가 발생하기 때문입니다 'case에 있는 상수식이 enum class Colors 타입인데 왜 조건식에는 int 타입을 넣는거얏!' 하고 화내는 모습인듯 합니다ㅋㅋㅋ 그래서 switch 조건식도 Colors 사용자정의타입 으로 명시적 형변환을 하여 타입을 맞춰주었습니다. 그리고 switch 문이 꽤 길어보이고 복잡해 보이지만, 비쥬얼스튜디오에는 switch 문을 프로그래머가 더 빨리, 더 쉽게 입력할 수 있도록 도와주는 자동완성 기능 이 존재합니다! < switch문 자동완성 > ' switch ' 입력 → ( tab) → enum class 이름 (위 예제에서는 ' Colors ')입력 → 다른곳 클릭 중간에 스페이스바나 다른 입력은 하지 않습니다. ( 참고 : https://ntbda.tistory.com/16 ) (참고2 : https://helloacm.com/code-snippet-auto-complete-on-switch-statement-using-enum-in-visual-studio/) 꽤 재미있는 기능이므로 여러가지 enum class를 활용하여 switch 문을 만들어보세요! 자동완성 단축키 연습 조금만 하시면 손에 금방 익어서 여러가지 switch 문을 작성하실 수 있으실겁니다! 여기까지 읽어주셔서 감사합니다 :D !! 잘못된 부분이 있다면 알려주세요 수정하겠습니다!