W przykładzie z vector<int> someVector
istringstream someStringStream
i można to zrobić:Jak korzystać z operatora wyodrębniania (>>) z wektorem <bool>?
for (int i=0; i < someVector.size(); i++) {
someStringStream >> someVector[i];
}
wiem, że vector<bool>
jest skuteczne wdrażanie i operator[]
zwraca obiekt odniesienia. Dla tego kodu powinienem używać indeksu zamiast iteratora, głównie dla czytelności. Obecnie używam to:
for (int i=0; i < someVector.size(); i++) {
bool temp;
someStringStream >> temp;
someVector[i] = temp;
}
Czy istnieje bardziej bezpośredni sposób realizacji tego?
To nie jest bezpieczne. Jeśli operator >> zawiedzie, wówczas "wartość" nie zostanie zainicjalizowana. Albo stan strumienia powinien być jawnie sprawdzony, albo std :: ios_base :: failbit powinien być ORed do wyjątków stream(). –
@ArneVogel Zostało to zmienione w C++ 11: jeśli wyodrębnianie nie powiedzie się, zero jest zapisywane do wartości (patrz http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt). Jednakże zgadzam się, że kontrola błędów jest konieczna w kodzie produkcyjnym. Mimo to jest tak wiele sposobów na zrobienie tego. Nie jest to kwestia wyboru, imho. – stefan