Użycie przerwania return w C++

2018-11-20 11:35
0

Czesc,

Mam pytanie czy w funkcji można użyć dwukrotnie przerwania pętli wyrażeniem "return" ? Tzn w przypadku wystąpienia danej wartości zwróć tą wartośc a jak nie to zwróć inną jak w kodzie poniżej

#include <vector>

std::vector<int>::const_iterator find(std::vector<int>::const_iterator begin, std::vector<int>::const_iterator end,int x)
{
    for (; begin < end; ++begin)
    {
        auto minimum = begin;
        for (auto index = begin; ++index < end;)
        {
            if (*index == x)
            {
                return index;
            }
        }
    }
    return end;
}
edytowany 1x, ostatnio: furious programming, 2018-11-20 16:46

Pozostało 580 znaków

2018-11-20 11:37
2

Tak. return wychodzi z funkcji i już, niezależnie od tego, jak bardzo zagnieżdżony jesteś.

To, czy takie rozwiązanie jest dobre dla czytelności kodu, to już inna sprawa… Moim zdaniem zazwyczaj jest, ale są ludzie, którzy tego unikają jak ognia.

Pozostało 580 znaków

2018-11-20 11:39
1

1) czemu nie uzyjesz std::find?
2) mozna (przeciez Ci sie kompiluje ;)) ale moim zdaniem bardziej czytelnie jest, gdy w funkcji jest jeden return

czyli tam gdzie masz return zapisujesz wartosc ktora chcesz zwrocic i robisz break; na petli

Pozostało 580 znaków

2018-11-20 12:20
0
fasadin napisał(a):

1) czemu nie uzyjesz std::find?
2) mozna (przeciez Ci sie kompiluje ;)) ale moim zdaniem bardziej czytelnie jest, gdy w funkcji jest jeden return

czyli tam gdzie masz return zapisujesz wartosc ktora chcesz zwrocic i robisz break; na petli

W treści zadania jest "Funkcja korzysta tylko z pliku nagłówkowego vector." więc break i find odpadają

Pozostało 580 znaków

2018-11-20 12:22
0

break jest wbudowane w jezyk wiec nieodpada bo nie uzywa zadnego innego pliku naglowkowego

Pozostało 580 znaków

2018-11-20 12:34
2
Adam Ciepieniak napisał(a):

Mam pytanie czy w funkcji można użyć dwukrotnie przerwania pętli wyrażeniem "return" ?

Nie ma co do tego żadnych przeciwwskazań.

Natomiast Brat @fasadin wpuszcza cię w maliny - break spowoduje wyskoczenie na zewnątrz jedynie tej zawierającej go pętli (czyli kod wskoczy do for (; itd) ) , i nie nadaje się aby zastąpić jasnego, czytelnego return <znaleziona wartość>

@Adam Ciepieniak: poza tym trochę przekombinowałeś z tą funkcją. Starczy ci takie coś:

std::vector<int>::const_iterator findFirstOccurence(std::vector<int>::const_iterator begin, std::vector<int>::const_iterator end,int valueToFind)// używaj bardziej opisowych nazw, parę literek więcej nie boli, a mocno poprawia czytelność kodu
{
   while (begin != end)
   {
      if (*begin == x)
      {
          break;//teraz break ma sens bo jest tylko 1 zagnieżdżenie pętli
          //albo alternatywna wersja dać return begin;
      }
      begin++;
   }

   return begin;// a ten return begin obsłuży zarówno wariant z break'iem, jak i bez break'a kiedy nie znajdzie szukanej wartości.
}

https://onlinegdb.com/S1c4ktW0m


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 7x, ostatnio: MasterBLB, 2018-11-20 13:42

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0