stringのpop_back()
C++のstringにはpush_back()はあるのにpop_back()がないので、大抵「s.resize(s.size()-1)」で代用していたのですが、これって効率いいのか疑問に思ってちょっと実験してみました。
式 | msvc-8.0 | gcc-mingw-3.4.2 | cw-8.3 | borland-5.8.2 |
---|---|---|---|---|
s.resize(s.size()-1) | 0.68 | 0.81 | 0.42 | 0.94 |
s.erase(s.size()-1) | 0.65 | 0.64 | 0.53 | 0.95 |
s.erase(next(s.rbegin()).base()) | 1.15 | 0.80 | 0.48 | 2.41 |
s.erase(prior(s.end())) | 1.12 | 0.64 | 0.52 | 1.99 |
1000000個の文字列を10回ずつテストで、単位は秒です。
コンパイラとライブラリによって多少違いがありますが、平均的には「s.erase(s.size()-1)」の方がやや有利のようです。