【发布时间】:2011-07-05 08:26:32
【问题描述】:
例如,假设string s 是这样的:
for(int x = 0; x < s.length(); x++)
比这更好?:
int length = s.length();
for(int x = 0; x < length; x++)
谢谢, 乔尔
【问题讨论】:
-
第一个涉及每次循环迭代的函数调用开销,而不是仅一次。据我所知,
.length()方法 可能 会导致不平凡的计算(例如,在字符串上循环寻找终止字符),尽管这在任何实际实现中都极不可能,AFAICT。 -
我不完全确定(因为我不熟悉 STL 字符串的实现),但是,在我看来,除了
int length会花费你 @ 987654326@ 更多内存。这是假设s.length()只返回一个已存储在结构中的整数值。 -
@Tim:我认为
.length保证为O(1),因为std::string符合Sequence的要求。 -
我问这个问题是因为我在一些博客上读到“永远不要在循环中的条件中使用 s.length(),因为它每次都必须搜索字符串以找到 NULL 终止符。”只是想知道这是否正确。
-
@Joel
strlen()是这样,但是string.length()不能使用 nul 终止符以明显的方式实现,因为std::string允许 nul(零)字节在字符串。
标签: c++ string optimization