vector 직접 구현 관련
안녕하세요! 정말 좋은 강의 잘 듣고 있습니다^^
1. 혼자서 구현을 해 보다가, reserve(.)에서 기존 capacity보다 신규 capacity가 작게 잘못 넣은 경우 size_까지 복사할 때 없는 배열에 접근하게 되는 문제가 되는 것 아닌가 생각이 듭니다. 그래서 다음과 같이 조기 종료 코드를 넣으면 어떤가요?
if (new_capacity < capacity_)
{
cout << "please make it bigger, not smaller ";
return;
}
2. 그리고 Iterator 생성자를 pointer에 대한 reference로 두는 경우(다음 코드)에는 에러가 이렇게 나는데 ㅠㅠ 혹시 이유가 무엇일까요?
Iterator(const T*& ptr) : _ptr(ptr)
{}
//ERROR
1>C:\Developer\CppForGameDeveloping\CPP_Basics\VectorMyself\VectorMyself.cpp(129,1): error C2440: '<function-style-cast>': cannot convert from 'T *' to 'Iterator<T>'
미리 감사합니다!!
답변 3
1
우연히 지나가다가 추가 질문을 봤는데,
글을 수정하시면 저한테 알림이 안 와서 알 수가 없습니다. ㅎㅎ
다음에는 댓글로 남기시거나 새로운 질문을 해주시기 바랍니다.
우선 참조값은 둘째치고 const T* 타입을 _ptr(ptr)을 통해 T* 타입으로 만들려고 하니,
여기서 첫번재 문제가 일어납니다.
굳이(?) 그렇게 받으시겠다면 캐스팅이 필요합니다.
문제는 거기서 끝나는게 아니라
const T*&를 인자로 받아야 하는데, const 참조는 왼값을 인자로 받으며
기본 코드에서 &_data[0]는 오른값이라 넣어줄 수 없습니다.
역시나 굳~이 꿋꿋하게 하려면 이렇게 한 단계를 거쳐서
왼값으로 만들어서 넣어줘야 합니다.
만약 위와 같은 문제가 해결되지 않으면,
Iterator(const T*& ptr)은 알맞는 후보가 아니라고 판단하기에
다른 생성자를 찾아보는데 나머지 애들도 맞는게 하나도 없으니
cannot convert from 'T *' to 'Iterator<T>'
자포자기 하고 에러가 뜨는 겁니다.
왼값 오른값에 관해서는 Modern C++쪽 후반부 내용을 참고하시기 바랍니다.
0
답변을 읽고 곰곰 생각을 해 보니 const T* 타입을 T* 타입으로 만드는 게 원칙적으로 안 된다는 것을 제대로 몰랐던 것 같습니다.
왼값 오른값도 엄청 좋은 복습이 되었습니다! 진심으로 감사드립니다. :)
실제 벡터는 예외코드가 아니라, if (new_capacity > capacity_)인 경우에만 동작하게 되어 있네요!
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
541
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
442
1
strcpy() 구현 관련 질문
0
513
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
453
1
클래스 타입의 포인터 질문합니다
0
546
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
498
1
템플릿 특수화 관련 질문
0
385
1
포인터 관련 질문합니다!
0
265
1
Unable to start assembler. Check your settings.
0
831
2
cpu선택
0
540
1
포인터 질문이 있습니다
0
324
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
585
1
iterator 삭제관련
0
406
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
310
1
15 분 45초 대 질문
0
309
0
스택 프레임 질문합니다!
2
306
1
오른값 참조 in 게임
0
384
0
동적할당 질문이 있습니다
0
450
1
안녕하세요 메모리에 대해 질문드립니다.
0
305
1
함수객체 의 매개변수
0
360
1
복사생성자
0
434
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
421
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
355
1
스택 오버플로우
2
790
1





