2012-04-21 5 views
1

C++에서 서명되지 않은 목록의 벡터 만들기. 내가 포인터에 관해서는 우둔하지만 목록에 포인터가있는 것으로 벡터를 선언해야한다고 생각합니다.C++ 놈 오류가 발생했습니다

그냥 재앙이었습니다. 그것이 컴파일되면, 나는 seg faults를 얻는다.

나는 파일을 읽을 때까지 벡터가 얼마나 커지는지 미리 알지 못합니다. (첫 줄에 있어야합니다) 나는 목록이 얼마나 커질 지 알 수 없습니다. 파일.

목록 벡터를 선언하는 방법에 대한 아이디어가 있으십니까? 일단 내가 알게되면 나머지 부분을 알아낼 수 있다고 생각합니다. (아마도 그렇지는 않지만 가까이 갈 것입니다). 고마워.

+4

'벡터 <벡터 > '은 좋은 출발점이 될 것입니다. 코드에서 포인터를 사용할 필요없이이 프로그램 (또는 적어도 여기에서 설명하는 부분)을 작성할 수 있습니다. –

+0

@ JamesMcNellis가 말했듯이'list''의''unsigned int''에 대한''vector''는 괜찮을 것입니다. 이것이 정말로 코드의 문제 부분 인 경우, 범위를 벗어나는 범위 (예 : 벡터 길이의 끝을 지나친 연산자 [])를 사용하여 액세스하는 것일 수 있습니다. – tmpearce

+0

대신'at '를 사용하면 그것이 가능할 것입니다. – chris

답변

2
  • 크래시의 위치를 ​​추적하려면 디버거를 사용하십시오.

  • 원시 포인터의 벡터를 만들지 마십시오. 포인터의 벡터가 반드시 있어야하는 경우에만 스마트 포인터를 사용하십시오.

  • 벡터는 메모리 관리 및 크기 조정을 수행합니다. vecOfLists.push_back (some_list); //add new list onto the back

은 일반 배열 대신에 목록을 사용하는 경우

vector<list<TYPE> > vecOfLists; //empty
, 당신은 대신 벡터의 벡터를 사용하여 더 나을 수 있습니다.

+0

방금 ​​집에 돌아 왔지만 나는 아직 시도하지는 않았지만 이러한 대답을 좋아합니다. vecOfLists의 경우 두 번째 줄에 빈 목록이 추가되지만 파일의 각 항목에 새 목록이 필요하거나 방금 만든 목록에 추가할지 여부는 미리 알 수 없으므로 작동하지 않을 것이라고 생각합니다. . 적어도 나는 그것이 작동하도록하는 방법을 모른다. .. 흠. – punstress

+1

새로운 목록이 필요하면'vecOfLists.push_back (the_new_list);'를 사용하십시오. 하나에 추가 할 필요가 있다면'vecOfLists [index_of_list_to_add_onto] .push_back (additional_element);' – chris

+0

을 사용할 수 있습니다. 아마도 n 번 반복하고 각 n에 대해 빈 목록을 만들 수 있습니다. 올바른 목록에 파일을 추가하십시오. 파일의 각 행에는 나머지 행을 넣을 목록의 색인을 알려주는 초기 값이 있습니다. 동일한 색인을 가진 행이 여러 개있을 수 있습니다. 그 목록에 접근하는 방법을 알아 내야 만합니다 ... 항목이 "index addx"인 경우 vecOfLists [index] .push_back (addx)와 같은 것이겠습니까? – punstress

관련 문제