2015-09-12 2 views
-2

В этой программе правая часть «списка» является единственной доступной частью. Однако при отображении списка левая сторона также должна быть напечатана на экране. Единственный способ получить данные о левых сторонах - перенести его на правую сторону, перемещая забор. Вот то, что я до сих пор:C++ первый элемент в списке исчезает

void display(textList& s) 
//! ensures: s = #s and displays the contents of s 
{ 
textList sTemp; 

int leftL = s.leftLength(); 

s.moveToStart(); 

cout << "<"; 
for (int i = 0, lastItem = (leftL - 1); i < leftL; i++) { 
    cout << s.rightFront(); 

    if (i < lastItem) 
     cout << ","; 

    s.advance(); 
} //end for 
cout << ">"; 


cout << "<"; 
for(int i = 0, z = s.rightLength(), lastItem = (z - 1); i < z; i++) { 
    Text x; 

    s.removeRightFront(x); 
    cout << x; 
    sTemp.addRightFront(x); 
    if (i < lastItem) { 
     cout << ","; 
    } // end if 
} // end for 
cout << ">" << endl; 

s.transferFrom(sTemp); 

} // display 

Поэтому в основном я двигаю забор поэтому у меня есть доступ ко всем данным, а затем напечатать первое значение, то Авансовое значение забора один раз, пока длину левой стороны имеет был достигнут, я затем распечатаю правую сторону.

Моя проблема в том, что самое первое значение правой стороны всегда пропадает. В чем проблема? Я потратил много времени на стрельбу, но я не могу найти ее; Я почти уверен, что это где-то в коде для печати правой стороны.

+0

Что такое забор и левый список и правый список в контексте списка? – user93353

+2

Я не думаю, что мы сможем решить это без полного примера; еще лучше [минимальный полный пример] (http://stackoverflow.com/help/mcve). – Beta

+0

Что такое 'textList'? – PaulMcKenzie

ответ

0

Изменен мой подход. Вместо того, чтобы манипулировать «s», я просто создал копию, с которой я мог бы обходиться без каких-либо последствий в этой линии. Затем я продвинул забор на копию и распечатал правую сторону тем же самым подходом, что и левый.

В заключение. Сделано копию. Сохраненная левая длина - z. переместил все на правую сторону. для цикла (z раз). распечатал данные. расширенный забор. сохранен правый длина - z. для цикла (z раз). печатные данные. расширенный забор.

void display(textList& s) 
//! ensures: s = #s and displays the contents of s 
{ 
textList newS; 
newS = s; 
int z = newS.leftLength(); 
newS.moveToStart(); 

cout << "<"; 
for (int i = 0, lastItem = (z - 1); i < z; i++) { 
    cout << newS.rightFront(); 

    if (i < lastItem) 
     cout << ","; 

    newS.advance(); 
} //end for 
cout << "> "; 

cout << "<"; 
for (int i = 0, z = newS.rightLength(), lastItem = (z - 1); i < z; i++) { 

    cout << newS.rightFront(); 
    newS.advance(); 

    if (i < lastItem) { 
     cout << ","; 
    } // end if 
} // end for 
cout << ">" << endl; 


} // display 
Смежные вопросы