【发布时间】:2011-01-11 19:20:41
【问题描述】:
我知道几个(全部?)STL 实现实现了“小字符串”优化,而不是存储通常的 3 个用于开始、结束和容量的指针,如果 sizeof (字符)
我正在考虑通过简单地将向量强制转换为字符串来滚动我自己,即为字符串提供向量接口。好主意?
【问题讨论】:
-
你的问题不是很清楚。此外,
vector与string的接口是什么意思?您是在谈论一个特殊的svector类来保存小字符串吗? -
没有。我的意思是一个包含任意值而不是 char 类型的字符串——就像一个向量。字符串的向量接口意味着包装字符串对象并暴露向量兼容接口,添加缺少的函数,如 push_back。
-
难道不能用分配器做点什么吗?您甚至不会获得 3 个指针的内存,因为向量还需要一种方法来知道它是处于“小”还是“大”模式。
-
执行您所指的“空间优化”的唯一标准库实现是 Dinkumware 的标准库,它是 Microsoft 的 Visual Studio 附带的库。
-
我从来没有尝试过,但是如果
template<class T> using small_vector = std::basic_string<T>;可以得到非常接近小型向量优化的东西吗? (它应该至少适用于 pod 类)。