我有一個const std::vector<char>-不是以空結尾的。我想使用 fmt 庫列印它,而不復制矢量。
我希望指定精度就足夠了,但是 fmt 檔案說:
請注意,即使指定了精度,C 字串也必須以空值結尾。
嗯,我的不是。我必須制作一個副本并用 填充它\0,還是我可以做其他事情?
uj5u.com熱心網友回復:
如果您可以升級到 C 17,那么您可以使用字串視圖引數而不是指向 char 的指標:
const std::vector<char> v;
std::string_view sv(v.data(), v.size());
fmt::format("{}", sv);
uj5u.com熱心網友回復:
fmt 接受兩種“字串”:
- C 風格- 只是一個指標,必須以空值結尾。
std::string-like - 資料 長度。
從 C 17 開始,C 正式具有參考型別,類似std::string字串視圖類,它可以參考您的字符向量。(不復制任何東西) - 并且fmt可以列印這些。問題是,您可能不在 C 17 中。但fmt它本身也必須在內部面對這個問題,所以它實際上已經涵蓋了你:
const std::vector<char> v;
fmt::internal::std_string_view sv(v.data(), v.size());
auto str = fmt::format("{}", sv);
感謝@eerorika 讓我對字串視圖感興趣。
uj5u.com熱心網友回復:
怎么用fmt::join?
回傳一個視圖,該視圖使用以 sep 分隔的元素格式化范圍。
[演示]
#include <fmt/ranges.h>
#include <vector>
int main() {
std::vector<char> v{'a', 'b', 'c'};
fmt::print("{}", fmt::join(v, ""));
}
// Outputs:
//
// abc
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486130.html
上一篇:運行可執行檔案時加載共享庫時出錯
