Loading...
Jovanna avatar Jovanna 186 Точки

li.end() защо не може да се дереференцира

Зашо дава грешка: "list iterator not dereferencable" ,

тази логика как може да се разише с итератори, че да работи?

std::list<int> listInt {11, 2, 88, 12, 9} ;

std::list<int>::iterator iter = listInt.end();
        if (10 > *iter)
        {
            //some code
        }

 

 

Тагове:
0
C++ Programming
kolioi avatar kolioi 641 Точки

std::end() сочи към елемент след последния в някакъв контейнер (не само list). Предполагам, че искаш да вземеш итератор към последния елемент, това може да стане така

if (10 > *--iter)
{
  //some code
}

и в този случай, разбира се, трябва да проверяваш дали списъка не е празен.

std::end

П.П. Разгледай този код и ще ти стане ясно защо хвърля exception

	reference operator*() const
		{	// return designated value
 #if _ITERATOR_DEBUG_LEVEL == 2
		if (this->_Getcont() == 0
			|| this->_Ptr == 0
			|| this->_Ptr == ((_Mylist *)this->_Getcont())->_Myhead)
			{	// report error
			_DEBUG_ERROR("list iterator not dereferencable");
			_SCL_SECURE_OUT_OF_RANGE;
			}

 #elif _ITERATOR_DEBUG_LEVEL == 1
		_SCL_SECURE_VALIDATE(this->_Getcont() != 0 && this->_Ptr != 0);
		_SCL_SECURE_VALIDATE_RANGE(this->_Ptr !=
			((_Mylist *)this->_Getcont())->_Myhead);
 #endif /* _ITERATOR_DEBUG_LEVEL */

		return (_Mylist::_Myval(this->_Ptr));
		}

 

1
12/12/2017 23:39:35
Jovanna avatar Jovanna 186 Точки

Благодаря!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.