Giter Club home page Giter Club logo

tinystl's Introduction

TinySTL

采用C++11实现一款简易的STL标准库,既是C++STL的一个子集(裁剪了一些容器和算法)又是一个超集(增加了一些容器和算法)

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

编译环境:VS2013及以上版本

##开发计划:

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

##完成进度:

  • STL的几大基本组件
    • type traits:100%
    • 空间配置器:100%
    • iterator traits:100%
    • reverse_iterator:100%
    • vector:100%
    • string:100%
    • priority_queue:100%
    • stack:100%
    • deque:100%
    • queue:100%
    • pair:100%
    • list:100%
    • unordered_set:100%
    • unique_ptr:100%
    • shared_ptr:100%
    • cow_ptr:100%
  • STL Algorithms:
    • fill:100%
    • fill_n:100%
    • find:100%
    • is_heap:100%
    • min、max:100%
    • make_heap:100%
    • pop_heap:100%
    • push_heap:100%
    • sort_heap:100%
    • swap:100%
    • all_of:100%
    • any_of:100%
    • none_of:100%
    • find_if:100%
    • find_if_not:100%
    • adjacent_find:100%
    • count:100%
    • count_if:100%
    • mismatch:100%
    • equal:100%
    • is_permutation:100%
    • search:100%
    • advance:100%
    • sort:100%
    • generate:100%
    • generate_n:100%
    • distance:100%
    • copy:100%
  • 其他组件:
    • circular_buffer:100%
    • bitmap:100%
    • binary_search_tree:100%
    • avl_tree:100%
    • suffix_array:100%
    • directed_graph:100%
    • trie tree:100%
    • Disjoint-set data structure:100%

##TinySTL单元测试(原单元测试代码逐步):

  • pair:100%
  • algorithm:20%
  • vector:100%
  • string:100%
  • priority_queue:100%
  • suffix_array:100%
  • queue:100%
  • stack:100%
  • bitmap:100%
  • circular_buffer:100%
  • deque:100%
  • list:100%
  • binary_search_tree:100%
  • avl_tree:100%
  • unordered_set:100%
  • directed_graph:100%
  • trie tree:100%
  • unique_ptr:100%
  • shared_ptr:100%
  • Disjoint-set data structure:100%

#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();
container quantity time(ms)
TinySTL::vector<int> 10万 2
TinySTL::vector<int> 100万 11
TinySTL::vector<int> 1000万 129
std::vector<int> 10万 6
std::vector<int> 100万 16
std::vector<int> 1000万 210
####(2):vector<string>
//std::vector<std::string> vec;
TinySTL::vector<std::string> vec;
ProfilerInstance::start();
int i = 0;
for (; i != 100000; ++i){
	vec.push_back(std::string("zouxiaohang"));
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();
container quantity time(ms)
TinySTL::vector<string> 10万 18
TinySTL::vector<string> 100万 181
TinySTL::vector<string> 1000万 2372
std::vector<string> 10万 29
std::vector<string> 100万 232
std::vector<string> 1000万 1972
####(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();
container quantity time(ms)
TinySTL::circular_buffer 1000万 75
TinySTL::circular_buffer 10000万 604
TinySTL::circular_buffer 100000万 5936
boost::circular_buffer 1000万 22
boost::circular_buffer 10000万 252
boost::circular_buffer 100000万 2241
####(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();
container quantity time(ms)
TinySTL::string 100万 7
TinySTL::string 1000万 39
TinySTL::string 10000万 484
std::string 100万 37
std::string 1000万 229
std::string 10000万 1965

####(6):priority_queue<int>

//std::priority_queue<int> pq;
TinySTL::priority_queue<int> pq;
ProfilerInstance::start();
int i = 0;
for (; i != 100000; ++i){
	pq.push(i);
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();
container quantity time(ms)
TinySTL::priority_queue<int> 10万 13
TinySTL::priority_queue<int> 100万 97
TinySTL::priority_queue<int> 1000万 1032
std::priority_queue<int> 10万 12
std::priority_queue<int> 100万 67
std::priority_queue<int> 1000万 752
TinySTL::vector<int> v;
int i = 0;
for (; i != 100000; ++i){
	v.push_back(i);
}
//std::priority_queue<int> pq(v.begin(), v.end());
TinySTL::priority_queue<int> pq(v.begin(), v.end());
ProfilerInstance::start();
for (i = 0; i != 100000; ++i){
	pq.pop();
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();
container quantity time(ms)
TinySTL::priority_queue<int> 10万 19
TinySTL::priority_queue<int> 100万 137
TinySTL::priority_queue<int> 1000万 1532
std::priority_queue<int> 10万 7
std::priority_queue<int> 100万 92
std::priority_queue<int> 1000万 1214

####(7):binary_search_tree<string>

ifstream f;
//char buff[256] = { 0 };
std::string word;
f.open("C:\\Users\\zxh\\Desktop\\text.txt");
TinySTL::vector<TinySTL::string> v;
while (f.good()){
	f >> word;
	//std::copy(word.begin(), word.end(), buff);
	//v.push_back(TinySTL::string(buff, buff + word.size()));
	v.push_back(word);
}
TinySTL::binary_search_tree<TinySTL::string> sbst;
ProfilerInstance::start();
for (const auto& word : v){
	sbst.insert(word);
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();
f.close();
container quantity time(ms)
TinySTL::binary_search_tree<string> 44067 16
TinySTL::binary_search_tree<string> 169664 64
TinySTL::binary_search_tree<string> 438230 277

####(8):deque<int>

//std::deque<int> dq;
TinySTL::deque<int> dq;
ProfilerInstance::start();
const int max = 10000000;
int i = 0;
for (; i != max / 2; ++i){
	dq.push_front(i);
}
for (; i != max; ++i){
	dq.push_back(i);
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();
container quantity time(ms)
TinySTL::deque<int> 10万 15
TinySTL::deque<int> 100万 78
TinySTL::deque<int> 1000万 1186
std::deque<int> 10万 90
std::deque<int> 100万 1087
std::deque<int> 1000万 4835
#####ps:这个性能差距的原因1是内部实现的机制不同,我的deque是预先分配内存因此相同条件下占用的内存更多,而stl的deque是需要的时候再分配,更加节省内存;2是stl的deque实现了更多更灵活的插入删除操作,我只是实现了在头尾的插入和删除

####(9):avl_tree<int> TinySTL::binary_search_tree bst; TinySTL::avl_tree avlt; for (int i = 0; i != 10000; ++i){ avlt.insert(i); bst.insert(i); } cout << "binary_search_tree height = " << bst.height() << endl; cout << "avl_tree height = " << avlt.height() << endl; 输出结果:

binary_search_tree height = 10000
avl_tree height = 14

####(10):list<int>

TinySTL::list<int> list;
//std::list<int> list;
const size_t max = 100000;
ProfilerInstance::start();
for (size_t i = 0; i != max; ++i)
	list.push_back(i);
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();
container quantity time(ms)
TinySTL::list<int> 10万 4
TinySTL::list<int> 100万 33
TinySTL::list<int> 1000万 286
std::list<int> 10万 189
std::list<int> 100万 1774
std::list<int> 1000万 17571

####(11):list<int>::sort()

TinySTL::list<int> list1;
std::list<int> list2;
std::default_random_engine dre;
std::uniform_int_distribution<int> id;
const size_t max = 10000;
for (int i = 0; i != max; ++i){
	auto n = id(dre);
	list1.push_back(n);
	list2.push_back(n);
}
double cost1 = 0.0, cost2 = 0.0;
for (int i = 0; i != 100; ++i){
	ProfilerInstance::start();
	list1.sort();//TinySTL::list<int>
	ProfilerInstance::finish();
	cost1 += ProfilerInstance::millisecond();

	ProfilerInstance::start();
	list2.sort();//std::list<int>
	ProfilerInstance::finish();
	cost2 += ProfilerInstance::millisecond();
}
cout << "TinySTL time: " << cost1 / 100 << "ms" << endl;
cout << "std time: " << cost2 / 100 << "ms" << endl;
container quantity time(ms)
TinySTL::list<int> 1万 0.88
TinySTL::list<int> 10万 17.621
TinySTL::list<int> 100万 591.354
std::list<int> 1万 1.25
std::list<int> 10万 35.692
std::list<int> 100万 665.128

####(12):suffix_array

char arr[] = { 'a', 'a', 'b', 'a', 'a', 'a', 'a', 'b' };
TinySTL::suffix_array sa(arr, 8);
auto suffixArray = sa.suffixArray();
auto rankArray = sa.rankArray();
auto heightArray = sa.heightArray();

TinySTL::Test::print_container(suffixArray, "suffixArray");
TinySTL::Test::print_container(rankArray, "rankArray");
TinySTL::Test::print_container(heightArray, "heightArray");

image

####(13):unordered_set<int>

TinySTL::Unordered_set<int> ust(10);
//std::unordered_set<int> ust(10);
const size_t insert_count = 1000000;
const uint64_t query_count = 100000000;
//calculate total insert time
ProfilerInstance::start();
for (size_t i = 0; i != insert_count; ++i){
	ust.insert(i);//per insert time
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();

//calculate total query time
ProfilerInstance::start();
for (uint64_t i = 0; i != query_count; ++i){
	ust.count(i);//per query time
}
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();
container quantity insert time(ms) query time(ms)
TinySTL::unordered_set<int> 1万/1亿 8 97
TinySTL::unordered_set<int> 10万/10亿 139 1000
TinySTL::unordered_set<int> 100万/100亿 1214 9546
std::unordered_set<int> 1万/1亿 64 101
std::unordered_set<int> 10万/10亿 884 953
std::unordered_set<int> 100万/100亿 2781 9682

####(14):sort

std::random_device rd;
const int len = 10000000;
int arr[len];
std::generate(std::begin(arr), std::end(arr), [&rd](){return rd(); });
ProfilerInstance::start();
TinySTL::sort(std::begin(arr), std::end(arr));
//std::sort(std::begin(arr), std::end(arr));
ProfilerInstance::finish();
ProfilerInstance::dumpDuringTime();
algorithm quantity time(ms)
TinySTL::sort 10万 11
TinySTL::sort 100万 133
TinySTL::sort 1000万 1547
std::sort 10万 13
std::sort 100万 147
std::sort 1000万 1730

####(15):directed_graph

template<class Index, class Value>
using dGraph = TinySTL::directed_graph < Index, Value > ;
dGraph<int, int> g;
dGraph<int, int>::nodes_set_type set1, set2, set3;
set1.push_back(g.make_node(1, 11));
set1.push_back(g.make_node(2, 22));
set1.push_back(g.make_node(3, 33));
g.add_node(g.make_node(0, 0), set1);

set2.push_back(g.make_node(5, 55));
set2.push_back(g.make_node(6, 66));
set2.push_back(g.make_node(7, 77));
g.add_node(g.make_node(1, 11), set2);

set3.push_back(g.make_node(12, 1212));
set3.push_back(g.make_node(13, 1313));
set3.push_back(g.make_node(14, 1414));
g.add_node(7, set3);

g.make_edge(12, 2);
g.make_edge(12, 3);
g.make_edge(12, 0);
std::cout << "graph after add nodes:" << std::endl;
std::cout << g.to_string();

auto func = [](const dGraph<int, int>::node_type& node){
	std::cout << "[" << node.first << "," << node.second << "]" << std::endl;
};
std::cout << "graph DFS from node(1, 11):" << std::endl;
g.DFS(1, func);
std::cout << "graph BFS from node(1, 11):" << std::endl;
g.BFS(1, func);

std::cout << "graph after delete node(7, 77):" << std::endl;
g.delete_node(dGraph<int, int>::node_type(7, 77));
std::cout << g.to_string();

image
image
image
image

####(16):trie tree

TinySTL::trie_tree t;
std::ifstream in;
in.open("C:\\Users\\zxh\\Desktop\\trie_tree_test.txt");
std::vector<std::string> v;
std::string s;
while (in){
	in >> s;
	v.push_back(s);
}
ProfilerInstance::start();
for (const auto& str : v){
	t.insert(TinySTL::string(str.data()));
}
ProfilerInstance::finish();
std::cout << "build trie tree costs " << ProfilerInstance::millisecond() << "ms" << std::endl;

ProfilerInstance::start();
auto res = t.get_word_by_prefix("v");
ProfilerInstance::finish();
std::cout << "get word by prefix \"v\" costs " << ProfilerInstance::millisecond() << "ms" << std::endl;
auto i = 0;
for (const auto& str : res){
	++i;
	if (i % 10 == 0) std::cout << std::endl;
	std::cout << str << " ";
}
std::cout << std::endl;

image

####(17):shared_ptr

shared_ptr<string> sp1(new string("hello"));
assert(sp1.use_count() == 1);
assert(*sp1 == "hello");
sp1->append(" world");
assert(*sp1 == "hello world");

{
	auto sp2 = sp1;
	assert(sp1.use_count() == 2);
}
assert(sp1.use_count() == 1);

####(18):unique_ptr

auto up = make_unique<string>(10, '0');
up->append("111");
assert(*up == "0000000000111");

up.release();
assert(up == nullptr);

up.reset(new string("hello"));
assert(*up == "hello");

####(19):cow_ptr

cow_ptr<string> cp1 = make_cow<string>("zouxiaohang");
auto cp2 = cp1, cp3 = cp1;
assert(cp1 == cp2 && cp2 == cp3);
assert(*cp1 == *cp2 && *cp2 == *cp3 && *cp3 == "zouxiaohang");

string s = *cp2;//read
assert(s == "zouxiaohang");
assert(cp1 == cp2 && cp2 == cp3);
assert(*cp1 == *cp2 && *cp2 == *cp3 && *cp3 == "zouxiaohang");

*cp2 = ("C++");//write
assert(*cp1 == *cp3 && *cp3 == "zouxiaohang");
assert(*cp2 == "C++");

####(19):union-find set

uf_set<10> uf;
uf.Union(0, 1);
uf.Union(2, 3);
uf.Union(3, 1);
assert(uf.Find(0) == uf.Find(2));

tinystl's People

Contributors

aiitslam avatar jiangtao92 avatar jxd134 avatar zouxiaohang 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  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  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  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  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  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

tinystl's Issues

运行问题

VS2013需要别的设置吗?问什么运行各种问题,如下等
1>c:\users\administrator\desktop\tinystl-master\tinystl\Detail\Bitmap.impl.h(18): warning C4800: “uint8_t”: 将值强制为布尔值“true”或“false”(性能警告)
1> c:\users\administrator\desktop\tinystl-master\tinystl\Detail\Bitmap.impl.h(16): 编译类 模板 成员函数“void TinySTL::bitmap<8>::setNthInInt8(uint8_t &,size_t,bool)”时
1> c:\users\administrator\desktop\tinystl-master\tinystl\Detail\Bitmap.impl.h(66): 参见对正在编译的函数 模板 实例化“void TinySTL::bitmap<8>::setNthInInt8(uint8_t &,size_t,bool)”的引用
1> c:\users\administrator\desktop\tinystl-master\tinystl\Detail\Bitmap.impl.h(57): 编译类 模板 成员函数“TinySTL::bitmap<8>::bitmap(void)”时
1> Test\BitmapTest.cpp(16): 参见对正在编译的函数 模板 实例化“TinySTL::bitmap<8>::bitmap(void)”的引用
1> Test\BitmapTest.cpp(16): 参见对正在编译的类 模板 实例化“TinySTL::bitmap<8>”的引用

Construct.h 中的 void destroy(ForwardIterator, ForwardIterator) 有点疑惑

这个函数是这样的:

1  template<class ForwardIterator>
2  inline void destroy(ForwardIterator first, ForwardIterator last) {
3	typedef typename _type_traits<ForwardIterator>::is_POD_type is_POD_type;
4	_destroy(first, last, is_POD_type());
5  }

第 3 句用了 _type_traits <ForwardIterator>::is_POD_type

这个版本的 destroy 对于 POD 类型不调用析构函数,对于非POD类型则调用析构函数。

假设类型 T 是 一个 ForwardIterator 的 value_type,那么通过这个 ForwardIterator 的类型判断可以决定 T 是 否为 POD 类型吗?

编译报错:“TinySTL::swap”: 对重载函数的调用不明确

编译报错

D:\Program File\VS\ide\VC\Tools\MSVC\14.35.32215\include\utility(107,5): error C2668: “TinySTL::swap”: 对重载函数的调用不明确
1>D:\study-hard\cpp-project\TinySTL-master\TinySTL\Utility.h(9,7): message : 可能是“void TinySTL::swap<_Ty>(T &,T &)”[通过使用参数相关的查找找到]
1> with
1> [
1> _Ty=std::_Tree_node<const TinySTL::binary_search_tree::node *,std::_Default_allocator_traits<std::allocator<const TinySTL::binary_search_tree::node *>>::void_pointer> *,
1> T=std::_Tree_node<const TinySTL::binary_search_tree::node *,std::_Default_allocator_traits<std::allocator<const TinySTL::binary_search_tree::node *>>::void_pointer> *
1> ]
1>D:\Program File\VS\ide\VC\Tools\MSVC\14.35.32215\include\utility(98,19): message : 或 “void std::swap<_Ty,0>(_Ty &,_Ty &) noexcept()”
1> with
1> [
1> _Ty=std::_Tree_node<const TinySTL::binary_search_tree::node *,std::_Default_allocator_traits<std::allocator<const TinySTL::binary_search_tree::node *>>::void_pointer> *
1> ]

IDE:visual studio2022
系统:window11

是TinySTL::swap跟STL::swap冲突了?还是其它啥问题啊?

VS2019编译不通过

  • 使用VS2019打开工程SLN文件,编译不通过
已启动生成…
1>------ 已启动生成: 项目: TinySTL, 配置: Debug Win32 ------
1>Alloc.cpp
1>String.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,15): error C2039: "ostream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,22): error C2143: 语法错误: 缺少“;”(在“&”的前面)
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,22): error C2433: “TinySTL::ostream”: 不允许在数据声明中使用“friend”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,41): error C2039: "ostream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,71): error C2238: 意外的标记位于“;”之前
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,15): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,22): error C2143: 语法错误: 缺少“;”(在“&”的前面)
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,22): error C2433: “TinySTL::istream”: 不允许在数据声明中使用“friend”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,42): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,67): error C2238: 意外的标记位于“;”之前
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,15): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,22): error C2143: 语法错误: 缺少“;”(在“&”的前面)
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,22): error C2433: “TinySTL::istream”: 不允许在数据声明中使用“friend”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,37): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,74): error C2238: 意外的标记位于“;”之前
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,15): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,22): error C2143: 语法错误: 缺少“;”(在“&”的前面)
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,22): error C2433: “TinySTL::istream”: 不允许在数据声明中使用“friend”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,37): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,62): error C2238: 意外的标记位于“;”之前
1>TrieTree.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,15): error C2039: "ostream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,22): error C2143: 语法错误: 缺少“;”(在“&”的前面)
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,22): error C2433: “TinySTL::ostream”: 不允许在数据声明中使用“friend”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,41): error C2039: "ostream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(193,71): error C2238: 意外的标记位于“;”之前
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,15): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,22): error C2143: 语法错误: 缺少“;”(在“&”的前面)
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,22): error C2433: “TinySTL::istream”: 不允许在数据声明中使用“friend”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,42): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(194,67): error C2238: 意外的标记位于“;”之前
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,15): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,22): error C2143: 语法错误: 缺少“;”(在“&”的前面)
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,22): error C2433: “TinySTL::istream”: 不允许在数据声明中使用“friend”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,37): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(219,74): error C2238: 意外的标记位于“;”之前
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,15): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,22): error C2143: 语法错误: 缺少“;”(在“&”的前面)
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,22): error C2433: “TinySTL::istream”: 不允许在数据声明中使用“friend”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,37): error C2039: "istream": 不是 "std" 的成员
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\utility(29): message : 参见“std”的声明
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\String.h(220,62): error C2238: 意外的标记位于“;”之前
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\TrieTree.cpp(84,15): error C2679: 二进制“<<”: 没有找到接受“TinySTL::string”类型的右操作数的运算符(或没有可接受的转换)
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(465,39): message : 可能是“std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_streambuf<char,std::char_traits<char>> *)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(440,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(const void *)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(422,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long double)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(404,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(double)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(386,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(float)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(368,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned __int64)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(350,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(__int64)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(332,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned long)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(314,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(295,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned int)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(269,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(int)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(250,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned short)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(216,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(short)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(198,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(bool)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(193,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(188,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_ios<char,std::char_traits<char>> &(__cdecl *)(std::basic_ios<char,std::char_traits<char>> &))”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(183,39): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_ostream<char,std::char_traits<char>> &(__cdecl *)(std::basic_ostream<char,std::char_traits<char>> &))”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(653,32): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(697,32): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(733,31): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(778,31): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(895,31): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const signed char *)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(901,31): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,signed char)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(906,31): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const unsigned char *)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(912,31): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,unsigned char)”
1>E:\VS2019community\VC\Tools\MSVC\14.28.29333\include\ostream(998,32): message : 或    “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const std::error_code &)”
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\TrieTree.cpp(84,15): message : 尝试匹配参数列表“(std::ostream, TinySTL::string)”时
1>main.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Deque.impl.h(246): warning C5037: TinySTL::deque<T,Alloc>::deque: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(53): warning C5037: TinySTL::list<T>::newNode: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(92): warning C5037: TinySTL::list<T>::list: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\CircularBuffer.impl.h(78): warning C5037: TinySTL::circular_buffer<T,N,Alloc>::circular_buffer: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\COWPtr.impl.h(35): warning C5037: TinySTL::cow_ptr<T>::cow_ptr: 类模板的成员的外部定义不得具有默认参数
1>Profiler.cpp
1>AlgorithmTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Deque.impl.h(246): warning C5037: TinySTL::deque<T,Alloc>::deque: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(53): warning C5037: TinySTL::list<T>::newNode: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(92): warning C5037: TinySTL::list<T>::list: 类模板的成员的外部定义不得具有默认参数
1>AVLTreeTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>BinarySearchTreeTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Deque.impl.h(246): warning C5037: TinySTL::deque<T,Alloc>::deque: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>BitmapTest.cpp
1>CircularBufferTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\CircularBuffer.impl.h(78): warning C5037: TinySTL::circular_buffer<T,N,Alloc>::circular_buffer: 类模板的成员的外部定义不得具有默认参数
1>COWPtrTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\COWPtr.impl.h(35): warning C5037: TinySTL::cow_ptr<T>::cow_ptr: 类模板的成员的外部定义不得具有默认参数
1>DequeTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Deque.impl.h(246): warning C5037: TinySTL::deque<T,Alloc>::deque: 类模板的成员的外部定义不得具有默认参数
1>GraphTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(53): warning C5037: TinySTL::list<T>::newNode: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(92): warning C5037: TinySTL::list<T>::list: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(56,9): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): message : 在编译 类 模板 成员函数“void TinySTL::vector<TinySTL::list<int>,TinySTL::allocator<T>>::resize(TinySTL::vector<T,TinySTL::allocator<T>>::size_type,TinySTL::list<int>)”时
1>        with
1>        [
1>            T=TinySTL::list<int>
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(144): message : 查看对正在编译的函数 模板 实例化“void TinySTL::vector<TinySTL::list<int>,TinySTL::allocator<T>>::resize(TinySTL::vector<T,TinySTL::allocator<T>>::size_type,TinySTL::list<int>)”的引用
1>        with
1>        [
1>            T=TinySTL::list<int>
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(142): message : 在编译 类 模板 成员函数“TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::Unordered_set(size_t)”时
1>        with
1>        [
1>            Index=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Graph.impl.h(95): message : 查看对正在编译的函数 模板 实例化“TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::Unordered_set(size_t)”的引用
1>        with
1>        [
1>            Index=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Graph.impl.h(95): message : 查看对正在编译的 类 模板 实例化“TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>”的引用
1>        with
1>        [
1>            Index=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Graph.impl.h(93): message : 在编译 类 模板 成员函数“void TinySTL::Detail::graph<Index,Value,EqualFunc>::DFS(const Index &,std::function<void (TinySTL::pair<Index,Value> &)>)”时
1>        with
1>        [
1>            Index=int,
1>            Value=int,
1>            EqualFunc=TinySTL::equal_to<int>
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\GraphTest.cpp(76): message : 查看对正在编译的函数 模板 实例化“void TinySTL::Detail::graph<Index,Value,EqualFunc>::DFS(const Index &,std::function<void (TinySTL::pair<Index,Value> &)>)”的引用
1>        with
1>        [
1>            Index=int,
1>            Value=int,
1>            EqualFunc=TinySTL::equal_to<int>
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Graph.h(138): message : 查看对正在编译的 类 模板 实例化“TinySTL::Detail::graph<Index,Value,EqualFunc>”的引用
1>        with
1>        [
1>            Index=int,
1>            Value=int,
1>            EqualFunc=TinySTL::equal_to<int>
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\GraphTest.cpp(9): message : 查看对正在编译的 类 模板 实例化“TinySTL::directed_graph<int,int,TinySTL::equal_to<Index>>”的引用
1>        with
1>        [
1>            Index=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(60,14): warning C4018: “>”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(60,28): warning C4018: “<=”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(64,14): warning C4018: “>”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(256,9): warning C4018: “<=”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(255): message : 在编译 类 模板 成员函数“void TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::rehash(TinySTL::Unordered_set<Key,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::size_type)”时
1>        with
1>        [
1>            Index=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(211): message : 查看对正在编译的函数 模板 实例化“void TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::rehash(TinySTL::Unordered_set<Key,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::size_type)”的引用
1>        with
1>        [
1>            Index=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(202): message : 在编译 类 模板 成员函数“TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::size_type TinySTL::Unordered_set<Key,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::count(const int &)”时
1>        with
1>        [
1>            Index=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Graph.impl.h(88): message : 查看对正在编译的函数 模板 实例化“TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::size_type TinySTL::Unordered_set<Key,std::hash<int>,EqualFunc,TinySTL::allocator<Key>>::count(const int &)”的引用
1>        with
1>        [
1>            Index=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Graph.impl.h(83): message : 在编译 类 模板 成员函数“void TinySTL::Detail::graph<Index,Value,EqualFunc>::_DFS(TinySTL::pair<Index,Value> &,std::function<void (TinySTL::pair<Index,Value> &)>,TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>> &)”时
1>        with
1>        [
1>            Index=int,
1>            Value=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Graph.impl.h(96): message : 查看对正在编译的函数 模板 实例化“void TinySTL::Detail::graph<Index,Value,EqualFunc>::_DFS(TinySTL::pair<Index,Value> &,std::function<void (TinySTL::pair<Index,Value> &)>,TinySTL::Unordered_set<Index,std::hash<int>,EqualFunc,TinySTL::allocator<Key>> &)”的引用
1>        with
1>        [
1>            Index=int,
1>            Value=int,
1>            EqualFunc=TinySTL::equal_to<int>,
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Graph.impl.h(192): message : 在编译 类 模板 成员函数“TinySTL::directed_graph<int,int,TinySTL::equal_to<Index>>::directed_graph(void)”时
1>        with
1>        [
1>            Index=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\GraphTest.cpp(9): message : 查看对正在编译的函数 模板 实例化“TinySTL::directed_graph<int,int,TinySTL::equal_to<Index>>::directed_graph(void)”的引用
1>        with
1>        [
1>            Index=int
1>        ]
1>ListTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(53): warning C5037: TinySTL::list<T>::newNode: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(92): warning C5037: TinySTL::list<T>::list: 类模板的成员的外部定义不得具有默认参数
1>PairTest.cpp
1>PriorityQueueTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Deque.impl.h(246): warning C5037: TinySTL::deque<T,Alloc>::deque: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>QueueTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Deque.impl.h(246): warning C5037: TinySTL::deque<T,Alloc>::deque: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>RefTest.cpp
1>SharedPtrTest.cpp
1>StackTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>正在生成代码...
1>正在编译...
1>StringTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\StringTest.cpp(312,14): warning C4834: 放弃具有 "nodiscard" 属性的函数的返回值
1>SuffixArrayTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(71,17): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(23): message : 查看对正在编译的函数 模板 实例化“void TinySTL::suffix_array::calSuffix<InputIterator>(const InputIterator,size_t,size_t)”的引用
1>        with
1>        [
1>            InputIterator=const char *
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\SuffixArrayTest.cpp(10): message : 查看对正在编译的函数 模板 实例化“TinySTL::suffix_array::suffix_array<const _Elem*>(const InputIterator,size_t,size_t)”的引用
1>        with
1>        [
1>            _Elem=char,
1>            InputIterator=const char *
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(73,17): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(74,17): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(81,24): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(83,31): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(84,18): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(88,18): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(89,18): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(90,18): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(91,18): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\SuffixArray.h(95,71): warning C4018: “<”: 有符号/无符号不匹配
1>TrieTreeTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>TypeTraitsTest.cpp
1>UFSetTest.cpp
1>UniquePtrTest.cpp
1>Unordered_setTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(53): warning C5037: TinySTL::list<T>::newNode: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\List.impl.h(92): warning C5037: TinySTL::list<T>::list: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(56,9): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): message : 在编译 类 模板 成员函数“void TinySTL::vector<TinySTL::list<int>,TinySTL::allocator<T>>::resize(TinySTL::vector<T,TinySTL::allocator<T>>::size_type,TinySTL::list<int>)”时
1>        with
1>        [
1>            T=TinySTL::list<int>
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(144): message : 查看对正在编译的函数 模板 实例化“void TinySTL::vector<TinySTL::list<int>,TinySTL::allocator<T>>::resize(TinySTL::vector<T,TinySTL::allocator<T>>::size_type,TinySTL::list<int>)”的引用
1>        with
1>        [
1>            T=TinySTL::list<int>
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(128): message : 在编译 类 模板 成员函数“TinySTL::Unordered_set<int,std::hash<int>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>::Unordered_set(const TinySTL::Unordered_set<Key,std::hash<int>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>> &)”时
1>        with
1>        [
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\Unordered_setTest.cpp(29): message : 查看对正在编译的函数 模板 实例化“TinySTL::Unordered_set<int,std::hash<int>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>::Unordered_set(const TinySTL::Unordered_set<Key,std::hash<int>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>> &)”的引用
1>        with
1>        [
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\Unordered_setTest.cpp(20): message : 查看对正在编译的 类 模板 实例化“TinySTL::Unordered_set<int,std::hash<int>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>”的引用
1>        with
1>        [
1>            Key=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(60,14): warning C4018: “>”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(60,28): warning C4018: “<=”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(64,14): warning C4018: “>”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(256,9): warning C4018: “<=”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(255): message : 在编译 类 模板 成员函数“void TinySTL::Unordered_set<std::string,std::hash<Key>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>::rehash(TinySTL::Unordered_set<Key,std::hash<Key>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>::size_type)”时
1>        with
1>        [
1>            Key=std::string
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(211): message : 查看对正在编译的函数 模板 实例化“void TinySTL::Unordered_set<std::string,std::hash<Key>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>::rehash(TinySTL::Unordered_set<Key,std::hash<Key>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>::size_type)”的引用
1>        with
1>        [
1>            Key=std::string
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Unordered_set.impl.h(142): message : 在编译 类 模板 成员函数“TinySTL::Unordered_set<std::string,std::hash<Key>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>::Unordered_set(size_t)”时
1>        with
1>        [
1>            Key=std::string
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\Unordered_setTest.cpp(47): message : 查看对正在编译的函数 模板 实例化“TinySTL::Unordered_set<std::string,std::hash<Key>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>::Unordered_set(size_t)”的引用
1>        with
1>        [
1>            Key=std::string
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\Unordered_setTest.cpp(47): message : 查看对正在编译的 类 模板 实例化“TinySTL::Unordered_set<std::string,std::hash<Key>,TinySTL::equal_to<Key>,TinySTL::allocator<Key>>”的引用
1>        with
1>        [
1>            Key=std::string
1>        ]
1>VectorTest.cpp
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): warning C5037: TinySTL::vector<T,Alloc>::resize: 类模板的成员的外部定义不得具有默认参数
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(56,9): warning C4018: “<”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(55): message : 在编译 类 模板 成员函数“void TinySTL::vector<int,TinySTL::allocator<T>>::resize(TinySTL::vector<T,TinySTL::allocator<T>>::size_type,int)”时
1>        with
1>        [
1>            T=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\VectorTest.cpp(85): message : 查看对正在编译的函数 模板 实例化“void TinySTL::vector<int,TinySTL::allocator<T>>::resize(TinySTL::vector<T,TinySTL::allocator<T>>::size_type,int)”的引用
1>        with
1>        [
1>            T=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\VectorTest.cpp(22): message : 查看对正在编译的 类 模板 实例化“TinySTL::vector<int,TinySTL::allocator<T>>”的引用
1>        with
1>        [
1>            T=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(60,14): warning C4018: “>”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(60,28): warning C4018: “<=”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(64,14): warning C4018: “>”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(78,9): warning C4018: “<=”: 有符号/无符号不匹配
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Detail\Vector.impl.h(77): message : 在编译 类 模板 成员函数“void TinySTL::vector<int,TinySTL::allocator<T>>::reserve(TinySTL::vector<T,TinySTL::allocator<T>>::size_type)”时
1>        with
1>        [
1>            T=int
1>        ]
1>C:\Users\cz\Desktop\desk\c++\stl\TinySTL-master\TinySTL-master\TinySTL\Test\VectorTest.cpp(93): message : 查看对正在编译的函数 模板 实例化“void TinySTL::vector<int,TinySTL::allocator<T>>::reserve(TinySTL::vector<T,TinySTL::allocator<T>>::size_type)”的引用
1>        with
1>        [
1>            T=int
1>        ]
1>正在生成代码...
1>已完成生成项目“TinySTL.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 =

bug in alloc.hpp

alloc.cpp line 104 should change to

for (size_t i = bytes; i <= EMaxBytes::MAXBYTES; i += EAlign::ALIGN)

chunk_alloc第二级配置器的问题

if (!start_free){
obj **my_free_list = 0, *p = 0;
for (int i = 0; i <= EMaxBytes::MAXBYTES; i += EAlign::ALIGN){
my_free_list = free_list + FREELIST_INDEX(i);
p = *my_free_list;
if (p != 0){
*my_free_list = p->next;
start_free = (char *)p;
end_free = start_free + i;
return chunk_alloc(bytes, nobjs);
}
}
end_free = 0;
}
heap_size += bytes_to_get;
end_free = start_free + bytes_to_get;

return chunk_alloc(bytes, nobjs);

当第二级配置器无法在free_list中找到空闲内存时,end_free=0,与《STL源码剖析》对比没有
image
这样当无可用内存就不会抛出异常,end_free = start_free + bytes_to_get;,会造成错误的水位标识?

分配器问题

Alloc.cpp 的103行开始对malloc分配失败的分支进行处理,遍历所有已有的free obj查看有无可用的free obj,其中for循环应该从i等于bytes开始,因为小于bytes的obj肯定不能满足,然后如果都没有可用的链表,tinystl依然默认其分配成功,并且最后将heap_size加上bytes_to_get和调用chunk_alloc可能导致无限调用

内存池中的内存什么时候释放

对于alloc,如果申请了内存池中的内存,用完之后归还给内存池了,这个时候内存池中仍然有申请的内存,在程序结束之前,什么时候释放内存池里面的这些内存呢?

老哥有兴趣一起合作吗

我在算法这块比较欠缺,我在写c++ 多线程 redis,有1年多时间了,但是有些模块做的不是很好,老哥有兴趣我们一起合作,留个QQ交流下。

Construct.h中析构元素中有个小疑问?

template<class ForwardIterator>
	inline void destroy(ForwardIterator first, ForwardIterator last){
		typedef typename _type_traits<ForwardIterator>::is_POD_type is_POD_type;
		_destroy(first, last, is_POD_type());

我的理解ForwardIterator 应该是表示迭代器? 那萃取的应该是*ForwardIterator,为什么是ForwardIterator?望赐教, Thx。

Algorithm.h中快速排序mid3函数的问题

函数mid3进行三点中值的选取,项目中函数代码存在问题

				if (pred(*mid, *first))
				{
					swap(*mid, *first);
				}
				if (pred(*last, *mid))
				{
					swap(*last, *mid);
				}
				if (pred(*last, *first))
				{
					swap(*last, *first);
				}

例如{3,2,1},经过该函数选取的中值是1,不符合期望

关于node和iterator实现的问题

你好,最近对照着看sgi_stl源码和你写的tinySTL源码的时候发现一个问题:(就list而言)
sgi_stl源码在实现list 的时候,他的node,和iterator都分别实现了一个node_base, iterator_base,然后node,iterator分别继承node_base, iterator_base.为什么需要这样实现呢?
我的想法是,node_base, iterator_base都是非泛型编程,然后node,iterator都是在node_base, iterator_base的基础上加入了泛型编程。这样能减少泛型编程编译时产生的冗余代码。不知这个想法是否正确。
如能回复,万分感谢。

Missing license file

Hello !
Interesting project but there is no mention to the license you want on it.
Can you add a license file ?
Cheers !

关于Allocator中destroy()函数以及Construct.h中destroy()函数的疑问

Allocator中destroy()函数没有对数据类型做萃取,全都调用了析构函数进行了析构,是不是需要结合Construct.h中destroy()函数对数据类型进行萃取之后再destroy().

还有一个问题就是Construct.h中destroy()函数直接
template <class ForwardIt> inline void destroy(ForwardIt first,ForwardIt last){ typedef typename _type_traits<ForwardIt>::is_POD_type is_POD_type; _destroy(first,last,is_POD_type()); }这样写是不是有点问题,是不是需要先萃取ForwardIt的value_type再_type_traits<>

一点小小的疑问

Vector中的insert函数存在问题

你好
我看过你的insert函数,存在一点问题,下面是我的测试代码

        namespace JJ
        {
#include <iostream>
            using namespace std;
            class TestItem
            {
            public:
                TestItem()
                {
                    ++count;
                    cout << "Construct" << endl;
                }

                TestItem(const TestItem & other)
                {
                    ++count;
                    cout << "Copy Construct" << endl;
                }

                virtual ~TestItem()
                {
                    --count;
                    cout << "Destructor" << endl;
                }

                static int getCount()
                {
                    return count;
                }
            private:
                static int count;
            };

            int TestItem::count = 0;

            void testCase16()
            {
                assert(TestItem::getCount() == 0);
                {
                    typedef TinySTL::vector<TestItem> TVector;
                    //typedef std::vector<TestItem> TVector;
                    TVector t(10);
                    t.push_back(TestItem());
                    t.push_back(TestItem());
                    t.push_back(TestItem());
                    //t.insert(t.begin(), 10, TestItem());
                    cout << t.capacity() << endl;

                    t.insert(t.begin(), t.begin(), t.begin() + 1);
                    cout << t.size() << endl;
                    t.clear();
                }
                assert(TestItem::getCount() == 0);

            }
        }

你的这个函数的实现里面,调用了

void insert_aux(iterator position, InputIterator first, InputIterator last, std::false_type);

utility.h 编译报错

g++ 4.2.1

../Utility.h:31:19: error: declaration of 'T1' shadows template parameter
template <class T1, class T2>

template<class T1, class T2>
    struct pair{
    public:
        typedef T1 first_type;
        typedef T2 second_type;
    public:
        T1 first;
        T2 second;
    public:
        pair(){}
        template<class U, class V> 
        pair(const pair<U, V>& pr);
        pair(const first_type& a, const second_type& b);
        pair& operator= (const pair& pr);
        void swap(pair& pr);
    public:
        template <class T1, class T2>
        friend bool operator== (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs);
        template <class T1, class T2>
        friend bool operator!= (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs);
        template <class T1, class T2>
        friend bool operator<  (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs);
        template <class T1, class T2>
        friend bool operator<= (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs);
        template <class T1, class T2>
        friend bool operator>  (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs);
        template <class T1, class T2>
        friend bool operator>= (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs);
        template <class T1, class T2>
        friend void swap(pair<T1, T2>& x, pair<T1, T2>& y);

    };

应该是友元函数的模版形参使用T1、T2会屏蔽外层的T1、T2?
Accessing template parameters of the member templates

关于allocate函数的实现与cppreference的冲突

你说你的代码是基于C++新标准的
在cppreference中:Allocates n * sizeof(T) bytes of uninitialized storage by calling ::operator new(std::size_t)
Throws std::bad_alloc if allocation fails.
而在你的代码里你竟然用了malloc
对不起,我是处女座,无法接受

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.