Is using string.length() in loop efficient?

前端 未结 6 1910
我在风中等你
我在风中等你 2021-02-20 09:11

For example, assuming a string s is this:

for(int x = 0; x < s.length(); x++)

better than this?:

int length         


        
6条回答
  •  暗喜
    暗喜 (楼主)
    2021-02-20 09:51

    In general, you should avoid function calls in the condition part of a loop, if the result does not change during the iteration.

    The canonical form is therefore:

    for (std::size_t x = 0, length = s.length(); x != length; ++x);
    

    Note 3 things here:

    • The initialization can initialize more than one variable
    • The condition is expressed with != rather than <
    • I use pre-increment rather than post-increment

    (I also changed the type because is a negative length is non-sense and the string interface is defined in term of std::string::size_type, which is normally std::size_t on most implementations).

    Though... I admit that it's not as much for performance than for readability:

    • The double initialization means that both x and length scope is as tight as necessary
    • By memoizing the result the reader is not left in the doubt of whether or not the length may vary during iteration
    • Using pre-increment is usually better when you do not need to create a temporary with the "old" value

    In short: use the best tool for the job at hand :)

提交回复
热议问题