Привет, я хотел бы понять, почему следующий код, который разделяет разделяемую цепочку с использованием regex
#include<regex>
#include<vector>
#include<string>
std::vector<std::string> split(const std::string &s){
static const std::regex rsplit(" +");
auto rit = std::sregex_token_iterator(s.begin(), s.end(), rsplit, -1);
auto rend = std::sregex_token_iterator();
auto res = std::vector<std::string>(rit, rend);
return res;
}
int main(){
for(auto i=0; i< 10000; ++i)
split("a b c", " ");
return 0;
}
медленнее, чем следующий код python
import re
for i in range(10000):
re.split(' +', 'a b c')
здесь
> python test.py 0.05s user 0.01s system 94% cpu 0.070 total
./test 0.26s user 0.00s system 99% cpu 0.296 total
Im, использующий clang++ в osx.
компиляция с -O3 сводит ее до 0.09s user 0.00s system 99% cpu 0.109 total