Я хочу напечатать диапазон значений с ,разделителем, но без []использования библиотеки fmt.
Если я попытаюсь распечатать какой-то диапазон, подобный этому
std::vector v {8,4,7,2};
std::cout << fmt::format("{}",v) <<"\n";
вывод
[8, 4, 7, 2]
Но я действительно хочу, чтобы результат был
8, 4, 7, 2
Как я могу это сделать?
Один из подходов, который я нашел, состоит в том, чтобы сделать следующее
std::cout << fmt::format("{}",fmt::join(v,", ")) <<"\n";
что работает. Однако он многословен и делает 2 вызова fmt, чего я хотел бы избежать. Это возможно?
демо
Кроме того, из-за производительности и удобочитаемости я не заинтересован в удалении []из строки, созданной fmt.
Решение проблемы
Более короткий код предназначен для fmtпрямой печати, а не просто для форматирования, а затем для передачи результата в обычном coutрежиме iostream:
fmt::print("{}\n", fmt::join(v, ", ")); // Optionally, I believe you can use the literals to make the format string compile-type checked, "{}\n"_format
Строка формата также включает новую строку и printвыполняет как форматирование, так и печать, поэтому она заметно короче/менее сложна, чем:
std::cout << fmt::format("{}", fmt::join(v, ", ")) << "\n";
Комментариев нет:
Отправить комментарий