Trong một ví dụ với vector<int> someVector
và istringstream someStringStream
bạn có thể làm điều này:Làm thế nào để bạn sử dụng toán tử trích xuất (>>) với vectơ <bool>?
for (int i=0; i < someVector.size(); i++) {
someStringStream >> someVector[i];
}
Tôi biết rằng vector<bool>
là một thực hiện hiệu quả, và operator[]
trả về một đối tượng tham khảo. Đối với mã này tôi nên sử dụng một chỉ mục chứ không phải là một trình lặp, chủ yếu là để dễ đọc. Hiện tại, tôi đang sử dụng điều này:
for (int i=0; i < someVector.size(); i++) {
bool temp;
someStringStream >> temp;
someVector[i] = temp;
}
Có cách nào trực tiếp hơn để thực hiện việc này không?
Điều này không an toàn. Nếu toán tử >> thất bại, thì "giá trị" sẽ không được khởi tạo. Hoặc trạng thái luồng phải được kiểm tra rõ ràng hoặc std :: ios_base :: failbit phải được ORED đối với ngoại lệ của luồng(). –
@ArneVogel Điều này thay đổi trong C++ 11: nếu khai thác thất bại, số không được ghi vào giá trị (xem http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt). Tuy nhiên, tôi đồng ý rằng việc kiểm tra lỗi là cần thiết trong mã sản xuất. Tuy nhiên, có rất nhiều cách để làm điều đó. Nó không phải là phạm vi của câu hỏi để chọn một, imho. – stefan