Jeśli front()
zwraca referencję, a pojemnik jest pusty, co otrzymam, niezdefiniowane odniesienie? Czy to oznacza, że muszę sprawdzić empty()
przed każdym front()
?Co otrzymam od przodu() pustego kontenera standardowego?
Odpowiedz
Otrzymujesz niezdefiniowane zachowanie - musisz sprawdzić, czy kontener zawiera coś za pomocą empty() (które sprawdza, czy kontener jest pusty) przed wywołaniem funkcji front().
Otrzymujesz niezdefiniowane zachowanie.
Aby uzyskać sprawdzanie zasięgu użyj w (0). Jeśli to się nie powiedzie, otrzymasz wyjątek out_of_range
.
Undefined Behavior
Zawsze trzeba mieć pewność, że pojemnik nie jest pusty przed wywołaniem przedni() w tej instancji. Wywołanie empty() jako bezpiecznego strażnika jest dobre.
Oczywiście, w zależności od projektu programu, zawsze posiadanie niepustego kontenera może być niezmiennym stwierdzeniem, które pozwala zapobiegać i zapisywać wywołanie funkcji empty() przy każdym wywołaniu funkcji front(). (lub przynajmniej w jakiejś części twojego kodu?)
Jednak, jak stwierdzono powyżej, jeśli chcesz uniknąć nieokreślonego zachowania w swoim programie, uczyń go silnym niezmiennikiem.
Tak, możesz użyć 'at', jak wspomniany Graham zamiast używać frontu.
Ale, w (0) jest dostępna tylko dla niektórych kontenerów - wektorów, deque, a nie dla innych - lista, kolejka, stos. W takich przypadkach musisz powrócić do bezpieczeństwa "pustego" czeku.
- 1. Szablon typedef dla kontenera standardowego (bez specjalizacji)?
- 2. Dodawanie UIStackView jako pustego kontenera w Storyboard
- 3. Czy obiekt może sam się wymazać ze standardowego kontenera C++?
- 4. Zatrzymywanie kontenera dokera od wewnątrz
- 5. Wykrywanie wartości pustej/pustego wejścia od użytkownika
- 6. Co otrzymam, jeśli zadeklaruję tablicę bez rozmiaru w zasięgu globalnym?
- 7. Podłączanie do standardowego silnika Informix (SE) Od PHP
- 8. certyfikaty ssl kontenera kontenera
- 9. Dlaczego kolekcje Firebase zaczynają się od pustego wiersza?
- 10. Czy można odróżnić plik git od standardowego wejścia?
- 11. Co to jest flaga "z" w woluminach kontenera kontenerowego - od opcji?
- 12. Co to jest źródło referencyjne dla standardowego raportu XUnit XML
- 13. Obliczanie odchylenia standardowego kątów?
- 14. Przekierowywanie standardowego wyjścia c, a następnie resetowanie standardowego wyjścia
- 15. Co to jest odwołanie do przodu w C?
- 16. Cofnij git przodu scalić
- 17. Mocowanie kontenera S3 do kontenera
- 18. Cofnij szybkie przewijanie do przodu
- 19. Ant exec: przekierowanie standardowego, ale nie standardowego błędu,
- 20. Używanie standardowego przycisku odświeżania
- 21. GUI dla standardowego ML?
- 22. aliasing funkcji szablonu standardowego
- 23. Meta tag trybu standardowego IE8
- 24. Tworzenie pustego środowiska Conda
- 25. knockout.js - ustawienie pustego zaznaczenia
- 26. Tworzenie standardowego projektu .NET Platforma
- 27. przodu zadeklarować szablonu alias
- 28. Port Apache do przodu
- 29. coraz wejściowe ze standardowego wejścia
- 30. Powtórzenie kontenera unique_ptr's
Możesz również użyć pustego(). –
Szkoda, że nie były bardziej szczegółowe, gdy projektowały i określały STL. Wydaje mi się, że wiele problemów związanych z portowaniem w C++ i błędów jest powodowanych przez specyfikacje platformowe tych "niezdefiniowanych zachowań", które są wykorzystywane przez niezbyt dobrych programistów. –
Decyzja o zrobieniu czegoś UB zwykle oznacza, że w alternatywnym przypadku jest trochę narzut - w tym przypadku wyrzucenie wyjątku, którego C++ zawsze stara się unikać. –