abseil cpp 基本用法 - housekeeper-software/tech GitHub Wiki

简介

abseil-cpp 是 google开源的c++ 基础库: github: https://github.com/abseil/abseil-cpp url: https://abseil.io/

比较重要的模块

absl::flat_hash_map : 对应于 std::unordered_map
absl::flat_hash_set : 对应于 std::unordered_set
absl::string_view:对应于 std::string_view(c++ 17),absl::string_view在c++ 14上可以提供,如果编译版本为17则用 std::string_view

无序容器与标准库的差别

1. 迭代删除
stl中的实现: 
for (auto it = c.begin(); it != c.end();)
    {
        if (it->first % 2 != 0)
            it = c.erase(it);
        else
            ++it;
    }

absl中的实现:
 for (auto it = map.begin(); it != map.end();) {
    auto current = it++;
    if (current->second % 2) {
      DLOG(INFO) << "erase:" << current->second;
      map.erase(current);
    }
  }
*******abls erase返回 void **********

absl::string_view

string_view 不包含字符串本身,只有字符串的指针和长度,因而它的声明周期要短与字符串本身,比如(std::string).  
1. 定义一个常量: constexpr absl::string_view kErrString = "ERR";
2. 传参:void SendReply(absl::string_view message),这里不用引用或者指针,应该传值(因为string_view非常轻量)
3. 由字符缓冲区构造: absl::string_view data(reinterpret_cast<const char *>(msg.data()), msg.size());
其他的:
  std::vector<absl::string_view> v = absl::StrSplit(message, ':');
  absl::EqualsIgnoreCase(v[0], kGetString)
使用string_view 则不会出现 std::string的中间临时构造过程,效率非常高。 
⚠️ **GitHub.com Fallback** ⚠️