Giter Site home page Giter Site logo

stl_container_test's Introduction

stl_container_test

《C++ STL与泛型编程高级-侯捷》视频中关于各种容器的测试代码

一、项目对应的Bilibili视频的地址为:C++ STL与泛型编程高级-侯捷

P3~P5讲解了容器之分类与各种测试,本项目是对应的源代码,在Windows下使用VS2013以及在CentOS7.6下使用g++编译器测试过,在Linux下可以直接使用make和cmake进行编译生成相应的可执行程序。

git获取项目源代码

git克隆源代码

[root@localhost STLDemo_houjie_leasson]# git clone https://github.com/ccf19881030/stl_container_test.git

二、在Linux下的编译测试如下:

1、使用makefile编译生成可执行文件

cd src
[root@localhost src]# ls
build  CMakeLists.txt  main.cpp  makefile  pub.h  test_array.hpp  test_deque.hpp  test_forwardlist.hpp  test_list.hpp  test_queue.hpp  test_slist.hpp  test_stack.hpp  test_vector.hpp
[root@localhost src]# make
g++ -o stl_container_test main.cpp -std=c++11
[root@localhost src]# ls
build  CMakeLists.txt  main.cpp  makefile  pub.h  stl_container_test  test_array.hpp  test_deque.hpp  test_forwardlist.hpp  test_list.hpp  test_queue.hpp  test_slist.hpp  test_stack.hpp  test_vector.hpp
[root@localhost src]# 

2、使用cmake编译生成可执行程序

[root@localhost stl_container_test]# cd src/
[root@localhost src]# ls
build  CMakeLists.txt  main.cpp  makefile  pub.h  stl_container_test  test_array.hpp  test_deque.hpp  test_forwardlist.hpp  test_list.hpp  test_queue.hpp  test_slist.hpp  test_stack.hpp  test_vector.hpp
[root@localhost src]# cd build/
[root@localhost build]# ls

[root@localhost build]# cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /bin/cc
-- Check for working C compiler: /bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /bin/c++
-- Check for working CXX compiler: /bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test COMPILER_SUPPORTS_CXX11
-- Performing Test COMPILER_SUPPORTS_CXX11 - Success
-- Performing Test COMPILER_SUPPORTS_CXX0X
-- Performing Test COMPILER_SUPPORTS_CXX0X - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/havealex/projects/Cpp_Demos/STLDemo_houjie_leasson/stl_container_test/src/build
[root@localhost build]# make
Scanning dependencies of target stl_container_test
[ 50%] Building CXX object CMakeFiles/stl_container_test.dir/main.cpp.o
[100%] Linking CXX executable stl_container_test
[100%] Built target stl_container_test
[root@localhost build]# ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  Makefile  stl_container_test
[root@localhost build]# 

三、运行可执行程序

STL标准库主要分为两种类型的容器:顺序容器和关联容器,常见的顺序容器有array、vector、list、forward_list、deque、stack、queue,关联容器有map、set、unordered_map等,使用100万个元素进行测试,通过将放入100万元素到各种容器,排序、查找并输出所消耗的时间,来测试容器的性能。

1、测试array

[root@localhost build]# ./stl_container_test 
select: 1
how many elements:1000000

test_array()......... 
milli-seconds:20000
array.size()= 1000000
array.front()= 52576
array.back()= 37040
array.data()= 0x7ffdba97f7a0
target (0~2147483647): 23456
-------------------before qsort: --------------
qsort(), milli-seconds: 200000
---------------------after qsort:------------------ 
array.size()= 1000000
array.front()= 0
array.back()= 65534
array.data()= 0x7ffdba97f7a0
bsearch(), milli-seconds: 0
found, 23456
[root@localhost build]# 

2、测试vector

[root@localhost build]# ./stl_container_test 
select: 2
how many elements:1000000

test_vector()......... 
milli-seconds:280000
vector.size()= 1000000
vector.front()= 43786
vector.back()= 45289
vector.data()= 0x7fd63c9e3010
vector.capacity()= 1048576
target (0~2147483647): 23456
::find(), mill-seconds: 0
found, 23456
sort()+bsearch(), milli-seconds: 1350000
found, 23456
[root@localhost build]# 

3、测试list

[root@localhost build]# ./stl_container_test 
select: 3
how many elements:1000000

test_list()......... 
milli-seconds:380000
list.size()= 1000000
list.max_size()= 768614336404564650
list.front()= 52776
list.back()= 15445
target (0~2147483647): 23456
::find(), mill-seconds: 10000
found, 23456
c.sort(), milli-seconds: 1730000
[root@localhost build]# 

4、测试forward_list

[root@localhost build]# ./stl_container_test 
select: 4
how many elements:1000000

test_forward_list()......... 
milli-seconds:400000
forward_list.max_size()= 1152921504606846975
forward_list.front()= 58416
target (0~2147483647): 23456
::find(), mill-seconds: 10000
found, 23456
c.sort(), milli-seconds: 2360000
[root@localhost build]# 

5、测试deque

[root@localhost build]# ./stl_container_test 
select: 5
how many elements:1000000

test_deque()......... 
milli-seconds:220000
deque.size()= 1000000
deque.max_size()= 2305843009213693951
deque.front()= 39552
deque.back()= 61479
target (0~2147483647): 23456
::find(), mill-seconds: 0
found, 23456
::sort(), milli-seconds: 1680000
[root@localhost build]# 

6、测试multiset

[root@192 src]# ./stl_container_test 
select: 6
how many elements:1000000

test_multiset()......... 
milli-seconds:2690000
multiset.size()= 1000000
multiset.max_size()= 461168601842738790
target (0~2147483647): 23456
::find(), mill-seconds: 50000
found, 23456
c.find(), mill-seconds: 0
found, 23456
[root@192 src]# 

7、测试multimap

[root@192 src]# ./stl_container_test 
select: 7
how many elements:1000000

test_multimap()......... 
milli-seconds:890000
multimap.size()= 1000000
multimap.max_size()= 384307168202282325
target (0~2147483647): 23456
c.find(), mill-seconds: 0
found, 65155
[root@192 src]# 

8、测试unordered_multiset

[root@192 src]# ./stl_container_test 
select: 8
how many elements:1000000

test_unordered_multiset()......... 
milli-seconds:1210000
unordered_multiset.size()= 1000000
unordered_multiset.max_size()= 768614336404564650
unordered_multiset.bucket_count()= 1056323
unordered_multiset.load_factor()= 0.94668
unordered_multiset.max_load_factor()= 1
unordered_multiset.max_bucket_count()= 768614336404564650
bucket #0 has 0 elements.
bucket #1 has 0 elements.
bucket #2 has 0 elements.
bucket #3 has 0 elements.
bucket #4 has 13 elements.
bucket #5 has 0 elements.
bucket #6 has 0 elements.
bucket #7 has 0 elements.
bucket #8 has 0 elements.
bucket #9 has 9 elements.
bucket #10 has 0 elements.
bucket #11 has 0 elements.
bucket #12 has 0 elements.
bucket #13 has 0 elements.
bucket #14 has 0 elements.
bucket #15 has 0 elements.
bucket #16 has 0 elements.
bucket #17 has 0 elements.
bucket #18 has 0 elements.
bucket #19 has 0 elements.
target (0~2147483647): 23456
::find(), mill-seconds: 50000
found, 23456
c.find(), mill-seconds: 0
found, 23456
[root@192 src]# 

9、测试unordered_multimap

[root@192 src]# ./stl_container_test 
select: 9
how many elements:1000000

test_unordered_multimap()......... 
milli-seconds:540000
unordered_multimap.size()= 1000000
unordered_multimap.max_size()= 768614336404564650
target (0~2147483647): 23456
c.find(), mill-seconds: 0
found, 52657
[root@192 src]# 

10、测试slist

[root@localhost src]# ./stl_container_test 
select: 10
how many elements:1000000

test_slist()......... 
milli-seconds:320000
slist.size()= 1000000
slist.front()= 20326
target (0~2147483647): 23456
::find(), mill-seconds: 0
found, 23456
c.sort(), milli-seconds: 1300000
[root@localhost src]# 

13、测试set

[root@192 src]# ./stl_container_test 
select: 13
how many elements:1000000

test_set()......... 
milli-seconds:1570000
set.size()= 65535
set.max_size()= 461168601842738790
target (0~2147483647): 23456
::find(), mill-seconds: 0
found, 23456
c.find(), mill-seconds: 0
found, 23456
[root@192 src]# 

14、测试map

[root@192 src]# ./stl_container_test 
select: 14
how many elements:1000000

test_map()......... 
milli-seconds:1180000
map.size()= 1000000
map.max_size()= 384307168202282325
target (0~2147483647): 23456
c.find(), mill-seconds: 0
found, 5333
[root@192 src]# 

15、测试unordered_set

[root@192 src]# ./stl_container_test 
select: 15
how many elements:1000000

test_unordered_set()......... 
milli-seconds:740000
unordered_set.size()= 65535
unordered_set.max_size()= 768614336404564650
target (0~2147483647): 23456
::find(), mill-seconds: 0
found, 23456
c.find(), mill-seconds: 0
found, 23456
[root@192 src]# 

16、测试unordered_map

[root@192 src]# ./stl_container_test 
select: 16
how many elements:1000000

test_unordered_map()......... 
milli-seconds:630000
unordered_map.size()= 1000000
unordered_map.max_size()= 768614336404564650
target (0~2147483647): 23456
c.find(), mill-seconds: 0
found, 13602
[root@192 src]# 

17、测试stack

[root@localhost src]# ./stl_container_test 
select: 17
how many elements:1000000

test_stack()......... 
milli-seconds:250000
stack.size()= 1000000
stack.top()= 53045
stack.size()= 999999
stack.top()= 9409
[root@localhost src]# 

18、测试queue

[root@localhost src]# ./stl_container_test 
select: 18
how many elements:1000000

test_stack()......... 
milli-seconds:260000
queue.size()= 1000000
queue.front()= 60351
queue.back()= 41216
queue.size()= 999999
queue.front()= 65064
queue.back()= 41216
[root@localhost src]# 

stl_container_test's People

Contributors

ccf19881030 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.