簡體   English   中英

如何使用運算符獲取在ostream中編寫的字符數<

[英]How to get how many chars were written in a ostream with the operator<<? Or how to read what was written?

1)
我想在運算符<<重載,以便可以打印模板T的矩陣。

我想使用模板類的運算符<< ,並且要使其對齊,我必須知道所寫字符的數量,並在最后添加空格直到一定數量的字符。

但是,我不知道如何(如果可以)獲取所寫的字符串或所寫的字符數...


2)
我需要表演

cout << myobject  

在幾次。 但是,此運算符<<花費大量時間,所以我只想保存一次並存儲其結果。 如何避免一遍又一遍地使用相同的方法?


有任何想法嗎?

第一個問題的解決方案。

  1. 使用std::ostringstream編寫矩陣的元素。
  2. std::ostringstream獲取std::string
  3. 編寫一個在字符串的左側或右側添加填充的函數,以使結果字符串具有給定的長度。
  4. 使用填充的字符串在std::coutstd::ofstream創建最終輸出。

通常,您不能。 std::ostream提供的最相似的東西是tellp方法,該方法可以為您提供當前文件中的位置。 不幸的是,當您關心與最后一個換行符相關的位置時,這對您沒有幫助; 此外,在許多常見情況下,甚至沒有實現此方法(標准輸出“文件”中或套接字中的位置是什么?)。

至於提取所寫的內容,不再贅述。 底層的streambuf不必保留這些數據-實際上,它甚至可以在寫入每個字符后立即刷新到底層的設備(這幾乎與無緩沖輸出一樣)。

這樣的事情會引起關注嗎?

│1         2         300       │
│1         463       6         │
│165       286       34457     │

│1.000000  0.000000  0.000000  │
│0.000000  1.000000  0.000000  │
│0.000000  0.000000  1.000000  │

│Hello     World!    This      │
│is        a         test      │
│to        create    spaces    │

代碼很粗糙,您可能需要對其進行調整以補償32位和64位。

我認為您也可以對其進行修改,以便可以使用制表符,默認情況下它占用8個空格。

在線代碼示例: https : //rextester.com/IFXUFZ49322

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM