最近写的程序中用到了很多 string 操作。split 是 string 中一个比较基础的操作,可惜stl里面没有原生支持。

这篇文章比较了三种常用的split方法的性能: 第一种基于 boost 的 tokenizer 方法, 第二种基于 c++ stl 的 stringstream (sstream) 方法, 第三种基于 qt 的 QString

下面是本次使用的代码:

以及 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.8)
project(c_plus_plus_stl_qt)

set(CMAKE_CXX_STANDARD 17)

find_package(Boost 1.66 REQUIRED)

find_package(Qt5 COMPONENTS Core REQUIRED)

add_executable(cpp_stl_qt_split qt_stl_boost_split.cpp )

target_link_libraries(cpp_stl_qt_split Qt5::Core ${Boost_LIBRARIES})

详情见: https://gist.github.com/WANG-lp/bef46ff6ecb8ca235627763b9b863a75

下面是测试结果

...
gen data cases 999 with number of words 4330
start testing stl library:
Elapsed time is :  1746 ms
start testing qt library:
Elapsed time is :  608 ms
start testing boost library:
Elapsed time is :  12696 ms

测试环境:

* archlinux
* gcc 7.3
* CPU i7-4790
* 32GB Memory

qt 的 split 方法出乎意料最快, boost 是最慢的。 另外值得注意的一点是 qt 的 QString 默认就是支持 unicode 的。现在qt有LGPL授权,意味着现在的qt库可以在闭源项目中使用了,以后有c++的项目时可以考虑一下使用qt库。