An open API service indexing awesome lists of open source software.

https://github.com/huangmingchuan/my-stl

一个 STL 子集,C++ 11实现
https://github.com/huangmingchuan/my-stl

Last synced: 2 months ago
JSON representation

一个 STL 子集,C++ 11实现

Awesome Lists containing this project

README

        

# My-STL
简单的 STL,采用 C++ 11 实现。

目的:在于掌握 STL 以及 C++模版编程。

编译环境:VS2013。

背景:
---------
其实在《C++ Primer》这本书中,用了大半本书的内容在教你怎样实现一个 vector,也提到了智能指针的实现。因此自己实现一个简单的 STL非常有必要,也能够加深对于基础知识的理解。

举个小例子,我在 vector 的拷贝、移动构造函数和拷贝、移动赋值运算符中加了一条输出语句,因此当我运行下面的代码时:
```cpp
void test_case2()
{
std_vector temp1(10, 0);
my_vector temp2(10, 0);
std::cout << "-------------- 1 -------------" << std::endl;
auto v1(temp1);
auto v2(temp2);
assert(mystl::test::container_equal(v1, v2));
std::cout << "-------------- 2 -------------" << std::endl;
auto v3(std::move(temp1));
auto v4(std::move(temp2));
assert(mystl::test::container_equal(v3, v4));
std::cout << "-------------- 3 -------------" << std::endl;
std_vector v5;
my_vector v6;
v5 = v1;
v6 = v2;
assert(mystl::test::container_equal(v5, v6));
std::cout << "-------------- 4 -------------" << std::endl;
std_vector v7;
my_vector v8;
v7 = std::move(v3);
v8 = std::move(v4);
assert(mystl::test::container_equal(v7, v8));
std::cout << "------------------------------" << std::endl;
}
```

结果会是这样:

![image](https://github.com/huangmingchuan/My-STL/raw/master/pic/pic1.png)

那么什么是拷贝构造、什么是移动构造,什么是拷贝赋值、什么是移动赋值就自然而然理解了。

内容:
-------------
####目前已实现的有:

* STL 基本组件
* 空间配置器
* reverse_iterator
* iterator_traits
* vector
* list
* string
* shared_ptr
* unique_ptr

性能测试:
-------------
待续...