GOOGLE ADS

вторник, 26 апреля 2022 г.

Форматировать диапазон с помощью fmt без закрывающих скобок []

Я хочу напечатать диапазон значений с ,разделителем, но без []использования библиотеки 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"; 

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...