Google C++每周贴士 #36: 新的拼接API

(原文链接:https://abseil.io/tips/36 译者:clangpp@gmail.com)

每周贴士 #36: 新的拼接API

  • 最初发布于2013-03-21
  • 作者:Greg Miller (jgm@google.com)
  • 更新于2018-01-24

“I got a good mind to join a club and beat you over the head with it.” – Groucho Marx
(译者注:译者文学水平太洼,起兴这部分保留原文。欢迎在评论区给出翻译建议。)

很多人想要一个新的拼接API。我们现在有一个新的拼接函数来替换所有现有的API,它的名字是absl::StrJoin()。你只需要给它一个需要被拼接的对象集合和一个分隔字符串,它会搞定剩下的事儿。它支持 std::stringabsl::string_viewintdouble——任何absl::StrCat()支持的类型——构成的集合。如果你需要拼接StrCat()不支持的类型,你可以为该类型提供一个自定义的Formatter;后面我们会看到怎么用Formatter拼接一个map

先来看几个小例子:

std::vector<std::string> v = {"a", "b", "c"};
std::string s = absl::StrJoin(v, "-");
// s == "a-b-c"

std::vector<absl::string_view> v = {"a", "b", "c"};
std::string s = absl::StrJoin(v.begin(), v.end(), "-");
// s == "a-b-c"

std::vector<int> v = {1, 2, 3};
std::string s = absl::StrJoin(v, "-");
// s == "1-2-3"

const int a[] = {1, 2, 3};
std::string s = absl::StrJoin(a, "-");
// s == "1-2-3"

下面的例子用一个Formatter参数来格式化map里的pair,并且换了一个分隔字符串,使输出既美观又易读。

std::map<std::string, int> m = {{"a", 1}, {"b", 2}, {"c", 3}};
std::string s = absl::StrJoin(m, ";", absl::PairFormatter("="));
// s == "a=1;b=2;c=3"

你还可以传一个C++ lambda表达式作为Formatter

std::vector<Foo> foos = GetFoos();

std::string s = absl::StrJoin(foos, ", ", [](std::string* out, const Foo& foo) {
  absl::StrAppend(out, foo.ToString());
});

请参阅absl/strings/str_join.h获取更多信息。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值