bool xInItems = std::find(items.begin(), items.end(), x) != items.end();
Czy istnieje bardziej zwięzły sposób sprawdzenia, czy x jest w pozycji? Wydaje się to niepotrzebnie pełne (powtarzanie elementów trzy razy), co sprawia, że intencja kodu jest trudniejsza do odczytania.C++ zwięzłe sprawdzanie, czy element w pojemniku STL (np. Wektor)
Na przykład, czy istnieje coś takiego jak następuje:
bool xInItems = boost::contains(items, x);
Jeśli nie istnieje dowolny algorytm Boost/stl bardziej zwięzły, aby sprawdzić, czy kolekcja zawiera element, to jest uważane za dobre lub złe praktyki używać zamiast funkcji pomocnika, aby włączyć contains(items, x)
?
Czy używam niewłaściwego pojemnika STL? Nawet zestaw std :: set spowodowałby, że bool xInItems = items.find(x) != items.end();
nadal wydaje się gadatliwy. Czy myślę o tym w niewłaściwy sposób?
Dla 'std :: set', może' bool xInItems = (items.count (x) == 1); '. Dla reszty, 'boost :: find' jest prawdopodobnie najlepszym z możliwych. (W obu przypadkach STL i boost są "count()", ale nie są tak wydajne, ponieważ muszą przejść przez cały zakres). –
Większość odpowiednich standardowych funkcji bibliotecznych zaprojektowano do pracy na parach iteratorów, a nie na całych kontenerach. Pozwala to na większą elastyczność kosztem zwięzłości. Na pewno możesz pisać swoje własne funkcje pomocnicze, jeśli chcesz (ja to robię), ale wtedy musisz umieścić ich nagłówki w dowolnym miejscu ... – dlf
Jeśli ktoś mógłby wyjaśnić wielokrotne głosowania w dół, byłbym wdzięczny . Wciąż jestem stosunkowo nowy w publikowaniu na przepełnieniu stosu.Dzięki – JDiMatteo