묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수 포인터 주소에 대해 궁금한게 있습니다.
변수나 클래스의 포인터의 주소는스택이나 힙 영역에 저장되어 있는 데이터의 주소인데함수 포인터의 주소는 코드 영역에 있는 주소인건가요?해당 주소로 이동해서 코드를 실행해라? 라는 개념으로이해하면 되는건지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C++
10.3 (9:45) 부분 push_back
공부하시다가 저처럼 " &인데 왜 복사를 하지? "하고 생각하신 분들에게 도움이 될 것 같습니다!https://stackoverflow.com/questions/2275076/is-stdvector-copying-the-objects-with-a-push-back
-
미해결홍정모의 따라하며 배우는 C++
operator 질문있습니다!
operator 강의를 듣다가 너무 헷갈려서 질문드립니다 ㅠㅠㅠoperator int() { cout << "cast here" << endl; return m_cents; } printerInt(cents);를 해줬을 때 int() 를 보고 컴퓨터가 어떻게 오버로딩을 찾아가는지 이해가 안됩니다.. 사실 그 전에 다른 오버로딩들도 이해가 안되어서 외우려고 했는데 이제는 멘탈이 나갑니다..ㅠㅠㅠ
-
해결됨홍정모의 따라하며 배우는 C++
네임스페이스 유무의 차이가 궁금합니다!
위의 코드에서는 17이 나오는데MyNumber2라는 namespace를 없애면 main함수에서 using namespace MyNumber1;을 해도 stillOne이 중복된다고 뜹니다. 왜 이런 건지 알 수 있을까요? 혹시 둘 다 int로 매개변수가 같아서 그런 건가요?만약 그렇다면 왜 매개변수가 같으면 안 되나요?
-
해결됨홍정모의 따라하며 배우는 C++
14분 35초 부근 질문 있습니다.
auto doSomething2(std::unique_ptr<Resource> res) { res->setAll(100); res->print(); return res; }여기서 res1 = doSomething2(std::move(res1)); 이게 파라미터 res가 std::move(res1)을 인자로 받아서 r-value로 return되었기 때문에 가능하다고 이해했습니다. auto& doSomething2(std::unique_ptr<Resource> res) { res->setAll(100); res->print(); return res; }그래서 이렇게 해도 파라미터 res가 std::move(res1)인 r-value를 인자로 받아서 그대로 std::move(res1)을 return해서 res1 = doSomething2(std::move(res1));을 실행해줄 줄 알았는데 std::unique_ptr가 l-value로, copy semantics를 사용하는 함수를 delete해서 안된다고 나옵니다. 왜 std::move(res1)의 reference인데 r-value가 아니라 l-value로 return 되나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-S와 next_permutation
안녕하세요5-S 14888문제를 풀면서 최대 10개의 연산자를 vector<char>에 넣은 뒤 do{...}while{next_permutation(..)};를 통해 계산을 진행하였습니다.하지만 순열의 경우의 수가 정상적으로 나오지 않는 문제를 발견, 확인해보니 다음과 같은 이유로 정렬이 생략되는 경우였습니다.교안에서도 분명히 '오름차순 / 내림차순' 의 배열을 기반으로 순열을 만든다.. 라고 하였으나 교안을 볼 때는 이게 정확히 무슨 의미인지 이해하지 못하고 넘어가 {next / prev}_permutation()을 잘못 사용한 것 같습니다.제가 교안을 제대로 소화하지 못해 헤매었던 부분이지만 추후 교안이 업데이트 될 때 보충되는 설명이 있으면 저같이 제대로 이해하지 못하고 넘어가는 사람이 줄어들지 않을까? 하는 생각에 질문 카테고리를 빌려 의견을 남겨봅니다.감사합니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
list #2 2:40~ 임의접근
안녕하십니까! 강의 정말 잘 듣고 있습니다!다름이 아니라 list의 임의 접근 문법이 막힌 이유에서 속도차이에 대해서 뭔가 팍!하고 와닿지 않아 질문드립니다.vector같은 경우 '연속된'주소에 데이터가 저장되기 때문에 n번째 데이터는 ++연산으로 '바로 옆주소' 로 이동하여 찾는다. 그렇기 때문에 비교적 빠르게 찾을 수 있다.하지만 list의 경우 연속되지 않는 다른 어딘가에 다음 값을 저장하고 그 주소로 가는 주소값을 들고 있는데 vector와는 다르게 일일이 '주소값을 타고 워프'를 해줘야하기 때문에 시간이 많이 걸린다. 라고 이해를 했지만 위 두 경우의 속도 차이가 문법을 막을 만큼 차이가 어마어마하게 나는 건가요?!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
데이터 크기 질문
강의 15분 쯤 내용에서 질문 있습니다.변수 a의 주소에서 1바이트 더한 위치에 b의 주소가 있을거라고 하시면서 a 주소에다가 1을 더하셨는데, 1만 저하면 1bit가 더해진 거 아닌가요? 1바이트를 더하는건데 왜 1만 더하는건지 이해가 안됩니다 ㅠㅠ
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
예외가 throw됨: 쓰기 액세스 위반입니다. this->_data이(가) 0x1110112였습니다.
계속 제목과 같은 오류가 뜹니다 ㅠㅠ 살려주세요..#include <iostream> #include <vector> using namespace std; // vector를 만들어보자 template<typename T> class Vector { public: Vector() : _data(nullptr), _size(0), _capacity(0) { } ~Vector() { if (_data) delete[] _data; } // [ ] void push_back(const T& val) { if (_size == _capacity) { //증설 작업 int newCapacity = static_cast<int>(_capacity * 1.5); //실수에서 int로 변환하면 데이터가 잘릴수도있다 if (newCapacity == _capacity) newCapacity++; reserve(newCapacity); } // [1][2][3][] _data[_size] = val; //데이터 개수 증가 _size++; } void reserve(int capacity) { _capacity = capacity; T* newData = new T[_capacity]; //데이터 복사 for (int i = 0; i < _size; i++) { newData[i] = _data[i]; //기존에 있던 데이터를 날린다 if (_data) delete[] _data; // 교체 _data = newData; } } T& operator[](const int pos) { //레퍼런스로 만들어야 데이터를 넣을 수 있음 return _data[pos]; } int size() { return _size; } int capacity() { return _capacity; } private: T* _data; int _size; int _capacity; }; int main() { Vector<int> v; //v.reserve(100); for (int i = 0; i < 100; i++) { v.push_back(i); cout << v.size() << " " << v.capacity() << endl; } for (int i = 0; i < v.size(); i++) { cout << v[i] << endl; } cout << "-----------------" << endl; // // for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) // { // cout << (*it) << endl; // } // return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-L 이중 for 문으로 풀면 시간초과가 납니다(코드 포함)
다른 질문등에서 답변하신거 보면 cin최적화 수행하면 통과될거라고 하셨는데ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)을 말씀하신건가요?저 3개 적용 후에도 이중 for문은 시간초과가 납니다. 다른 최적화가 더 있는지 궁금합니다. http://boj.kr/ab8e9792717d4c5c8abf00f5bf7cd641
-
미해결홍정모의 따라하며 배우는 C++
1.11 강의에서 add.h 와 add.cpp로 분리하였습니다.
파일이 서로 다른데 어떻게 definition이랑 declaration을 서로 찾을 수 있는 건가요??(만약 서로 찾을 수 있다는 것이 맞다면 한 프로젝트 안에서 파일들이 서로 달라도 함수 선언을 할 때 항상 이름이 겹치지 않게 해줘야 하는 것이 맞나요?)
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
빌드, 컴파일 전혀 문제 없고 코드 상으로도 문제 없는 부분에 자꾸 빨간 줄이 뜹니다 ㅠㅠ
#pragma region을 쓴 이후부터 계속 이런식인데..위에 flag변수 선언된 상태고 빌드, 결과도 이상없이 나오는데 이상하게 저런 빨간 줄이 생깁니다. 어디 찾아보니 소스코드에서 다시확인으로 파일이랑 솔루션 다시 확인해보래서 했는데 그 방법 써도 안고쳐지네요...ㅠㅠ 코드 문제는 아니지만 자꾸 보이고 오류에 떠서 신경 쓰이고 나중에도 계속 이러면 헷갈릴 것 같아서 질문 남깁니다.어떻게 해야 고쳐질까요..?
-
미해결홍정모의 따라하며 배우는 C++
static int a;
void doSomething(){ static int a ; ++a; cout << a << endl; }int main(){ doSomething(); doSomething(); } 연습 차 일부러 static에 초기화 값을 안넣어줬는데요. error 가 안나고 0으로 자동 초기화해서 1, 2 ,가 출력되더라고요. 원래 static은 초기화를 안해주면 0으로 알아서 넣어주나요?
-
해결됨홍정모의 따라하며 배우는 C++
3분 30초 부근 질문 있습니다.
그림을 보면 Der class의 가상표에 func1(), func2()가 있는데 저는 my_derived에 func2()가 없어도 상속 구조이므로 호출이 되어서 func2()이 실행이 되는데 virtual 키워드를 만나게 되므로 Base class의 가상표를 호출해서 fun2()가 실행되는 구조로 생각이 드는데 틀린 걸까요? 아니면 파생 클래스는 그보다 상위 클래스의 virtual function에 대한 포인터를 가상표에 다 지니고 있는 건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
show memory에 값이 안올라옵니다.
show memory가 공란으로 나옵니다 왜 일까요...
-
해결됨홍정모의 따라하며 배우는 C++
3분 10초 부근 질문 있습니다.
~Base()가 virtual 이라면은 ~Base() 대신에 오버라이드된 ~Derived()가 실행이 되고 끝이 아니라 왜 ~Base()도 실행이 되나요?~Derived() override { cout << "~Derived()" << endl; delete[] m_array; Base::~Base(); }저는 이렇게 해야될 걸로 예상했는데 소멸자는 예외인가요?
-
미해결홍정모의 따라하며 배우는 C++
혹시 자막설정 가능한가요?
자막설정이 없는건가요? 궁금해서 여쭤봅니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-K BOJ 3474 추가아이디어 공유 (교수 현우) + python
추가아이디어 - 그리디min으로 5와 2횟수 비교할 필요없이 5가 최솟값을 보장 while문으로 계속해서 나누는방법for 문으로 5 25 125로 나우는방법이아닌 5로 나눈값을 계속해서 나누는 형태(중간에 나눈값은 따로 더함)C++http://boj.kr/9f743d2fbc00459bba06f2559896e037#include<bits/stdc++.h> using namespace std; int n, a; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for(int i = 0; i < n; i++){ cin >> a; int ret5 = 0; for(int j = 5; j <= a; j *= 5){ ret5 += a / j; } cout << ret5 << "\n"; } return 0; }python ( while 적용 )http://boj.kr/c031aa4a62fd4690b2d17271266f87c6import sys input = sys.stdin.readline for _ in range(int(input())): a = int(input()) ret = 0 while a >= 5: a //= 5 ret += a print(ret)
-
해결됨홍정모의 따라하며 배우는 C++
공변 반환형에 대해서 질문 있습니다.
왜 공변 반환형은 포인터나 레퍼런스는 가능한데 왜 클래스가 직접적으로 return 되는 경우는 없나요? 무언가 이유가 있을 거 같은데 모르겠습니다...
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
비트연산과 비트플래그 강의 질문합니다.
19:30 부분flag |= (1 << 2); 에서flag |부분이 하나의 변수이름으로 봐야되나요?아니면 단순히 flag와 (1 << 2)를 | 계산하기 위해서 저위치에 |를 두었다고 봐야되나요?하나의 변수 이름이라면 나중에 무적+변이를 생략해서 flag | 로 입력해도 문제가 없나요?