벡터

2012-12-02 4 views
1
내가 올바른 방법으로 이것에 대해 갈거야 것처럼 내가 느끼는

에서 클래스의 벡터를 액세스,하지만 난 대중 모두와 아주 간단한 클래스 person을 가지고 "EXC BAD ACCESS"벡터

오류가 계속.

class person 
{ 
    public: 
    int id; 
    vector<float> scores; 
    float avgscore; 
}; 

그때 그때 클래스 내부 벡터에 액세스를 시도

vector<person> *people = new vector<person>[num_persons]; 

new 연산자를 사용 person s의 벡터를 만들 person

(*people)[current_person].scores.push_back(temp); 

여기서 current_person = 0, 및 temp은 정수입니다.

나는 올바른 방법으로 벡터를 처리합니까?

+0

전 stackoverflow에서 검색했으며 초기화에는 둥근 대괄호, 즉 새 벡터 (num_persons)을 사용해야합니다. 하지만 왜 그런지 모르겠지만 일관성이없는 것처럼 보입니다. 이것에 대한 답변을 upvote 것입니다. – jonathanasdf

+0

일관성이 없습니다. 초기화에 []을 사용하는 * 유일한 * 것은 C 스타일 배열입니다. 다른 모든 것은 초기화 목록에() (또는 {})을 사용합니다. 이것은 벡터 포인터를'[]'지우지 않기 때문에 의미가 있습니다. – Max

+0

@Max note :'std :: map <>'은 실패한 find 뒤에 암시 적 삽입을 위해'operator []()'를 사용합니다. 내가 동의하는 나머지. – WhozCraig

답변

2

이 시도 :

vector<person> people(num_persons); 

하고 ...

people[current_person].scores.push_back(temp); 
+0

이것은 여전히 ​​나에게 나쁜 접근 에러를 일으킨다. 다른 장소에서라도 – user1869173

+0

이 나를 위해 일한다. http://codepad.org/sBBGfKs0 – combinatorial

+0

죄송합니다. 문제는 for 루프가 벡터 범위를 넘어서고, 사례 연구가 불길 함. 그래도 모든 것에 감사드립니다! – user1869173

1

이 줄을

새로운 벡터는 벡터를 생성하지만 (*people)[0]에 접근, 0 요소를 포함

vector<person> *people = new vector<person>[num_persons]; 
오류 메시지 EXC BAD ACCESS이 이야기를 알리는 정의되지 않은 동작입니다. 방문하는 사용자에게 사람 요소를 추가해야합니다 (예 :

person p1; 
people->push_back(p1); // add element to vector 
(*people)[0].scores.push_back(temp); // now you are ok to visit first element. 
// don't forget to delete vector at right place 
delete people; 

vector를 이미 사용하고 있으므로 원시 포인터 대신 사람에 대한 벡터를 계속 사용할 수 있습니다.

std::vector<person> people; 
person p1; 

people.push_back(person); 
people[position].scores.pus_back(score); 
// don't need to worry releasing people memory anymore.