TinySTL

采用C++11实现一款简易的STL标准库

目的练习数据结构与算法和C++ Template编程

编译环境VS2013及以上版本

##开发计划:

  • STL的几大基本组件如string、vector、list、deque、set、map、unordered_*等
  • STL算法库中的大部分算法
  • circular buffer
  • bitmap
  • skip list
  • binary search tree
  • AVL tree
  • 线段树
  • splay tree
  • rope
  • Van Emde Boas tree
  • treap
  • B-tree
  • trie
  • suffix array/tree
  • Disjoint-set data structure
  • k-d tree
  • R-tree
  • Graph

##完成进度:

  • STL的几大基本组件
    • type traits100%
    • 空间配置器100%
    • iterator traits100%
    • reverse_iterator100%
    • vector100%
  • STL Algorithms:
    • fill100%
    • fill_n100%
  • circular_buffer90%
  • bitmap100%
  • string70%

#TinySTL测试: ###测试环境Windows 7 && VS2013 && release模式 ###测试结果: ####(1):vector<int>

//std::vector<int> vec;
TinySTL::vector<int> vec;
ProfilerInstance::start();
int i = 0;
for (; i != 10000; ++i){
	vec.push_back(i);
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();

######i = 100000 -> (TinySTL::vector2ms \ std::vector6ms) ######i = 1000000 -> (TinySTL::vector11ms \ std::vector16ms) ######i = 10000000 -> (TinySTL::vector129ms \ std::vector210ms)
####(2):vector<string>

//std::vector<std::string> vec;
TinySTL::vector<std::string> vec;
ProfilerInstance::start();
int i = 0;
for (; i != 10000; ++i){
	vec.push_back(std::string("zouxiaohang"));
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();

######i = 100000 -> (TinySTL::vector18ms \ std::vector29ms) ######i = 1000000 -> (TinySTL::vector181ms \ std::vector232ms) ######i = 10000000 -> (TinySTL::vector2372ms \ std::vector1972ms) ####(3):circular_buffer<int, N>

TinySTL::circular_buffer<int, 10000> cb(10000, 0);
//boost::circular_buffer<int> cb(10000, 0);
ProfilerInstance::start();
for (int i = 0; i != 10000000; ++i){
	cb.push_back(i);
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();

######i = 10000000 -> (TinySTL::circular_buffer75ms \ boost::circular_buffer22ms) ######i = 100000000 -> (TinySTL::circular_buffer604ms \ boost::circular_buffer252ms) ######i = 1000000000 -> (TinySTL::circular_buffer5936ms \ boost::circular_buffer2241ms) ####(4):题目利用bitmap找出str中未出现的字母

std::string str("abcdefghijklmnpqrstuvwxyz");
TinySTL::bitmap<26> bm;
for (auto it = str.cbegin(); it != str.cend(); ++it){
	bm.set(*it - 'a');
}
cout << bm << endl;
cout << bm.size() << endl;
for (int i = 0; i != 26; ++i){
	if (!bm.test(i))
		cout << "字母" << (char)('a' + i) << "没出现!!!" << endl;
}

输出结果:

111111111111110111111111111000000
32  
字母o没出现

####(5):string

//std::string str;
TinySTL::string str;
ProfilerInstance::start();
int i = 0;
for (; i != 1000000; ++i){
	str.push_back('x');
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();

######i = 1000000 -> (TinySTL::string7ms \ std::string37ms) ######i = 10000000 -> (TinySTL::string39ms \ std::string229ms) ######i = 100000000 -> (TinySTL::string484ms \ std::string1965ms)

Description
TinySTL is a subset of STL(cut some containers and algorithms) and also a superset of STL(add some other containers and algorithms)
Readme 551 KiB
Languages
C++ 100%