现在我有一个std :: strings数组,并在我的字体中有一个函数来查找它的宽度。
for(std::vector<std::pair<std::string,bool>>::const_iterator it = items.begin();
it != items.end(); ++it)
{
cSz = getFont().getTextWidth(it->first);
if( cSz > h)
{
h = cSz;
}
}
widestItem = h;
我想知道我是否可能忽略了更好的方法,因为这是一种非常强力的方法来找到它。
在我的情况下,存储每个的宽度并参考它并没有多大意义。
由于
答案 0 :(得分:3)
如果我正在优化这个,我会:
确保使用分析器确定这是重要的时间。
可能有(字体,字符串)元组的缓存。如果你反复计算相同字符串的宽度,这将有所帮助。但这取决于您的确切用例。
在常见情况下,您可以非常快速地使用getTextWidth方法 - 您可以拥有256个文本宽度单位的平面数组,并且只需取消引用并总结您已获得的每个latin-1字符。这将足够快,你不会看到在现代CPU上花费的时间。当然,你仍然需要实现非拉丁字符,你可能想也可能不想做字距,连字和复杂的文本布局(这可能会让这些东西变得昂贵)。
答案 1 :(得分:2)
如果字符串长度很重要,你可以在将字符串添加到向量时存储它的长度,这样你就不需要每次都计算它(你可以使用3个项目的std :: tuple而不是std ::如果你有权访问C ++ 0x)。如果经常更改字体,则可能不合适。或者,如果向量不包含数百万个项目,则可以存储长度并在更改字体时重新计算长度。
当我们没有太多关于软件结构的信息以及除了这个小片段之外您正在做什么之外,优化很难。