0

このコードが、リンクされたリストを使用してベクターの「at」関数を正しく模倣しているかどうか疑問に思っています。この概念は、リンクリストを教えることでしたが、pos++ を正しい場所に配置したかどうかはわかりません。誰かが私を助けて、各行が何をしているのか教えてくれるので、whileループから抜け出す方法がわかりますか? 今のところ、混乱しています。ありがとう!

プロジェクト全体のペーストビンは次のとおりです: http://pastebin.com/wyNQx3GP

みんなありがとう

 // This returns the countyElectionResults result at a particular point
 // in the list.
 // This is analogous to the at method in the vector class.
 countyElectionResults countyElectionList::at(int place){
    if(head == NULL){
            countyElectionResults * name = NULL;
            return * name;
    }
    else{
            countyElectionResults * current = head;
            int pos = 0;
            while(pos != place && current->getNextResult() != NULL){
                    current = current->getNextResult();
            }
            pos++;
            return * current;
    }
    cout << "Not Found" << endl;
 }
4

3 に答える 3

1

if 条件が true の場合の return ステートメントにも、コードにバグがあります。

countyElectionResults countyElectionList::at(int place){
    if(head == NULL){
            // if head is null, then set name to NULL
            countyElectionResults * name = NULL;
            // This is segmentation fault due to dereferencing name (null)
            return * name;
    }
    else{
            // set the current to list head and pos to 0
            countyElectionResults * current = head;
            int pos = 0;
            // compare pos to place, while these are different
            // and list does not end
            while(pos != place && current->getNextResult() != NULL){
                    // set current to next node
                    current = current->getNextResult();
            }
            pos++;  // this should be inside the loop, incremented when current 
                    // advances
            return * current; 
    }
    cout << "Not Found" << endl;
 }
于 2012-12-17T11:33:27.513 に答える
0

いいえ、pos++ は while ループ内にある必要があります。

while(pos != 場所 && current->getNextResult() != NULL)
{
   current = current->getNextResult();
   位置++;
};
于 2012-12-17T11:28:06.180 に答える
0

ループ中に通過した位置をカウントする必要があるため、pos++ はループ内にある必要があります。そうしないと、pos != place場所がゼロでない限り、をチェックしても実際の意味はありません。現在、これまでに実行した数字とケースで機能します。すべてのケースで機能するとは限りません.....

編集 - -

そして、私がうまくいかないと言うとき、コンパイルしないとかSIGSEVを与えるのではなく、間違った結果を与えることを意味します

于 2012-12-17T11:31:01.567 に答える