Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

MilushT avatar MilushT 1 Точки

C++Advanced Task 3 Duplicates

Здравейте,

Може да се мине по елентите на list с един от двата цикъла:

cycle 1:

for (std::list <Company*>::iterator itComp = companies.begin(), end = companies.end(); itComp != end; ++itComp){}

cylce 2:

 for (auto copyComp : companies)

Въпрос 1:

Предвид на това, че итератора в cycle 1 сочи към пойтер, може ли да се вземе адреса към, който сочи пойнтера (не итератора) и ако да по какъв начин?

Въпрос 2:

В cylce 2 copyComp е всъщност елемент от листа от пойнтери. Когато си върви без прекъсване цикъла си минава през всичките елементи. Може ли да се прескочи един copyComp или да се мине на следващия или да се върне назад?  Например след erase във втория цикъл да се каже на цикъла да мине на следващия copyComp. За първия цикъл знам, че може да се мине на следващия итератор. 

 

Тагове:
0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

На въпрос 1 си отговаряш във въпрос 2 - copyComp там е елемент от list<Company*>, което означава, че copyComp е указател към Company обект - тоест Company*. Съответно, за да достъпиш паметта на този адрес адрес, към който сочи указателя, просто дереференцираш copyComp (примерно copyComp->getId() или (*copyComp).getId()). Обратното обаче - да вземеш итератора от указателя - не е възможно.

На въпрос 2 - не, range-based for цикъла не може да прескача елементи или да ходи напред/назад, и също така очаква да няма промени в контейнера, който се итерира. Предназначен е да се ползва само за типичната ситуация, в която искаш да посетиш подред всички елементи, за всичко по-особено трябва да ползваш нещо от типа на cycle 1.

Поздрави,

Жоро

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