Jak w C ++ 17 zadeklarować i zainicjować wektor par (lub krotek) za pomocą opcjonalnego elementu?
std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true},
{2, false},
{3, nullptr}};
Mam parę, w której drugi element może być zerowy / opcjonalny.
std::piecewise_construct
może również zapewnić ciekawe alternatywy.reset
tutaj korzystać .Odpowiedzi:
Szukasz
std::nullopt
zamiastnullptr
.źródło
std::
tak spamuje ? Dlaczego nie tylkousing std::vector
i przyjaciele, więc możesz po prostu pisaćvector<pair<int, optional<bool>>
? Czyta o wiele zdrowiejvector
,pair
,optional
itp używam w tej linii. Dołączenie wbudowanej przestrzeni nazw mówi mi jednoznacznie, skąd ta funkcja pochodzi i co robi; linia jest samodzielna. Jest to szczególnie prawdziwe w przypadku większych projektów (ponieważ całkowicie eliminuje konflikty przestrzeni nazw), ale jest również przydatne w przypadku zwięzłych przykładów kodu.std
?arg
,count
,find
,size
std::
całkowicie dyskretny. Byłoby inaczej, gdyby nazwa przestrzeni nazw była znacznie dłuższa.Lub prosta domyślna konstrukcja:
źródło
std::nullopt
lepiej komunikuje zamiary.