Я использую C++ 11 std::list
и список итераторов. Я использую вложенные циклы и проверяю условие, и если это удастся, я использую оператор goto
, чтобы выйти. Псевдокод показано ниже:Проблема, использующая for loop и goto statement
std::list<myclass>::iterator tmpItr;
std::list<myclass>::iterator tmpItr2;
std::list<std::list<myclass>::iterator>::iterator radItr;
double cutoffVal = someVal;
double currVal = 0.0;
for (radItr=radList.begin();radItr!=radList.end();radItr++) {
tmpItr2 = *radItr;
for (tmpItr=pList.begin();tmpItr!=pList.end();tmpItr++) {
if (tmpItr == tmpItr2)
continue;
/* Some Operation Here */
currVal += NewVal;
if (currVal >= cutoffVal)
goto BREAKLOOP;
}
}
BREAKLOOP:
// Use tmpItr and tmpItr2
Моя проблема заключается в том, что когда-то значение tmpItr
идет к list.end()
и я получаю ошибку сегментации. Описывает ли заявление goto
сообщение о приращении здесь?
Я также попытался добавить еще один класс итератора между продолжать и операции, как tmpItr3 = tmpItr. В случаях, когда я получаю ошибку сегментации, т. Е. TmpItr указывает на list.end(), tmpItr3 этого не делает. Что указывает на то, что во время разрыва цикла tmpItr изменился – Amit
Это не связано с 'goto', и это не должно быть проблемой, если /, когда ваш итератор равен' list.end() '. –
Какой смысл сравнивать два итератора с разными списками ??? – SergeyA