c++ - 将 boost::format 与 std::vector 一起使用
问题描述
可以像下面这样boost::format
使用。std::vector<std::string>
std::vector<std::string> name = {"some", "name"};
boost::format("%s, %s") % name[0] % name[1];
由于我有一个大向量,我想将它们一起使用而无需手动编写索引:
std::vector<std::string> name = {"some", "name"};
boost::format("%s, %s") % name;
使用诸如boost::algorithm::join
连接字符串之类的东西不是一种选择。有没有办法在不显式编写索引的情况下使用向量实现字符串格式化?
解决方案
查看此示例:
#include <vector>
#include <string>
#include <iostream>
#include <boost/format.hpp>
auto format_vector(boost::format fmt, const std::vector<std::string> &v) {
for(const auto &s : v) {
fmt = fmt % s;
}
return fmt;
}
int main() {
std::vector<std::string> name = {"some", "name"};
std::cout << format_vector(boost::format("%s, %s"), name) << "\n";
return 0;
}
(https://godbolt.org/z/nGqW9h)
Operator%
of format 在内部存储部分解析的字符串,并返回自身 - 因此它可以像常规使用一样被链接。我们可以存储这个部分状态以循环操作。
虽然,您仍然需要注意%s
格式字符串中的正确计数!
推荐阅读
- python - 在 sagemaker 中旋转大熊猫数据框
- vuejs2 - 我想在 vuejs 中的图像上悬停时开始幻灯片放映
- typescript - 如何使用 es6 将 esri-leaflet 导入 Angular
- php - 在不刷新页面的情况下获取选择选项的值
- python - 将电影标题的文本文件和导演组一起读入字典
- arrays - 如何以角度显示数组数据
- python - Python Pandas Drop 在使用 drop 时重新排序我的数据框
- python - TypeError: int() 参数必须是字符串、对象或数字,而不是“时间戳”
- c# - 而不是一组新的数据,我怎么能只添加项目的数量
- javascript - Django:onchange后什么脚本函数会重新加载模型?