C++, vector를 동적할당 하고, 접근하기
글쓴이: minyoung347 / 작성시간: 금, 2016/01/22 - 11:44오후
안녕하세요, C++로 vector를 동적할당하고 거기에 접근하려는 코드를 만들고 있습니다.
문제를 간단하게 하기 위해서 10명의 사람이 1~10번까지 번호를 부여 받고, 각각 점수를 10*(1~10)점 받았다고 하겠습니다.
제 생각에는 아래와 같이 코드를 만들면 ptr가 가리키는 크기가 10인 벡터가 하나 생성되고,
크기가 10인 벡터에 다음과 같은 변수(number, grade)를 차례로 넣는다고 생각했습니다.
하지만 위의 코드를 실행시키면
error: 'class std::vector' has no member named 'number'
error: 'class std::vector' has no member named 'grade'
라는 에러 문구가 나옵니다. 이 문제를 어떻게 해결할 수 있을까요??
답변해 주시면 감사하겠습니다.
class people { public: int number; int grade; } ------------------------------------- int num_of_people; num_of_people=10; vector<people> *ptr = new vector<people>(num_of_people); for(vector<people>::size_type i=0; i!=num_of_people; ++i) { *ptr[i].number=i; *ptr[i].grade=i*10; }
Forums:
int main(int argc, char**
그 방법은 생각좀해봐야 될것같네요
class People{public: int
이 방법으로 하니깐 됩니다.
(*(People*)&Ptr[i]).number =
(*(People*)&Ptr[i]).number = i;
잘못된 메모리 참조입니다.
C++에서 포인터에 대한 형변환을 쓰고 있다면 뭔가 잘못되어가고 있다고 생각하는게 좋습니다.
이게 정답인것 같네요. 프로그램 종료하기전에 어째
이게 정답인것 같네요.
프로그램 종료하기전에 어째 뻑난다했더니 위의 예제가
너무 깊게 생각하니 저런 오류가 나는듯합니다.
코드 정리
//------------------------------------------------------------
//출력은 되는 코드
//------------------------------------------------------------
http://codepad.org/FXwrtUF4
//------------------------------------------------------------
//메모리 오류가 발생한 코드
//------------------------------------------------------------
http://codepad.org/iwWrAoyK
//------------------------------------------------------------
//코드가 한줄 증가할때 마다. 처리 시간이 증가 합니다. ㅇ_ㅇ;;
//------------------------------------------------------------
//------------------------------------------------------------
//처리 속도
//GPGPU AMP > PPL > 배열 > CAtlMap > StlPort > stl list vector > queue deque map
//------------------------------------------------------------
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
(*ptr)[i].number=i; 괄호를
(*ptr)[i].number=i;
괄호를 치세요.
연산자의 우선순위가 배열참조 연산자가 더 높습니다.
오옹 이 방법도 있었네요
오옹 이 방법도 있었네요
답변 정말 감사합니다. 원래 코드에서도 (*ptr)
익명사용자님 답변 정말 감사합니다. 원래 코드에서도 (*ptr) 방법을 쓰니까 바로 오류가 사라졌습니다.
저렇게 바로 생각하려면 공부를 체계적으로 해야겠네요ㅜ.. 다시 한 번 감사드립니다!!
음 제가 한방법이 값은 나오는데 뭔가 제대로
음 제가 한방법이
값은 나오는데 뭔가 제대로 틀린것같은 기분이..
윗 방법과 이 방법을 혼용해버리니깐 값이 짬뽕으로 나오는데 곰곰히 생각해봐야겠어요
제 방법이 오류가 있었네요역시나 오류내놓고 뻑..
제 방법이 오류가 있었네요
역시나 오류내놓고 뻑..
포인터 공부를 조금더 하고 와야겠습니다.
BrownBear님, 친절하게 답변을 달아주셔서
BrownBear님, 친절하게 답변을 달아주셔서 감사합니다. 일단은 (*ptr)로 하니까 바로 되긴 했습니다.
Bear님이 알려주신 코드들도 보면서 다양하게 접근하는 방법을 알았습니다. 알려주신 코드들도 연구해 보도록 하겠습니다. 감사합니다!!
제껀 연구하면 안되는거에요 이상한 포인터
제껀 연구하면 안되는거에요
이상한 포인터 참조해버리는거에요 ㅋㅋ... 클나영
STL의 벡터 맞죠?
http://ideone.com/IRfVnj
이렇게 하시면 됩니다.
그리고 벡터에 대해서는 기본 개념을 좀더 공부하세요.
http://www.hanbit.co.kr/network/view.html?bi_id=1606
이런 끔찍한 C++ 의 탈을 쓴 C 코드네요.
이런 끔찍한 C++ 의 탈을 쓴 C 코드네요.
----------------------------------------------------
개인 블로그: https://kangssu.com
왜 vector를 동적할당으로
vector를 dynamic allocation하는 이유는 아마도 vector가 갖고 있는 데이터들을 copy하는 일이 생기지 않도록 하자는 것일 텐데요. 그냥 보통 int variable들 다루듯이 vector를 쓰셔도 c++ 11 이후의 move semantic이나 tail call optimization 같은 컴파일러 최적화로 내부의 데이터들이 일일이 모두 카피되는 일은 잘 생기지 않습니다. 중복 카피가 되는 건 vector 구현에 사용되는 O(1) 규모의 숨겨진 data들뿐이죠.
코드 스타일을 떠나서
코드 동작하지 않는 원인만 보면, 연산자 우선순위 때문에 그렇습니다.
에서
으로
바꾸면 됩니다. 물론 안좋은 코드입니다.
댓글 달기