2016-04-20 16 views
6

Nếu tôi sử dụng mã này:Lấy ký tự cuối cùng trong một stringstream mà không cần sao chép toàn bộ đệm của nó

template <typename Streamable> 
/* ... */ 
std::stringstream ss; 
ss << function_yielding_a_Streamable(); 
auto last_char = ss.str().back(); 

sau đó (tôi tin) một bản sao của chuỗi trong ss 's đệm sẽ cần phải được tạo ra, chỉ cần để tôi có được nhân vật cuối cùng, và sau đó nó sẽ bị phá hủy. Thay vào đó tôi có thể làm điều gì đó tốt hơn không? Có lẽ sử dụng phương pháp seekp()?

+1

Tại sao đặt 'chuỗi' vào 'stringstream' ở nơi đầu tiên? – Sean

+0

@ean: Câu hỏi công bằng, xem chỉnh sửa. – einpoklum

+0

Có lẽ, nó không * có * là 'chuỗi ký tự'? Có lẽ bạn có thể sử dụng luồng tùy chỉnh thay thế. – user2079303

Trả lời

6

Bạn có thể làm một cái gì đó như thế này:

char last_char; 
std::stringstream ss; 
ss << function_yielding_a_Streamable(); 
ss.seekg(-1,ios::end);//get to the last character in the buffer 
ss>>last_char; 
+0

Tôi sẽ không cần phải tìm kiếm lại (ví dụ: nếu tôi quấn nó trong một chức năng tham gia một ostringstream và tôi muốn hành động sạch)? – einpoklum

+0

@einpoklum xin lỗi vì phát lại trễ, tôi tin rằng bạn có thể làm điều đó bằng cách sử dụng * seekp (0) * để tìm cách bắt đầu để chèn. Tôi cho rằng bạn có nghĩa là để nói vượt qua * stringstream & * chứ không phải là * ostringstream & * kể từ với sau này bạn không thể truy cập khai thác * operator >> * để đọc ký tự cuối cùng. –

Các vấn đề liên quan