MyTinySTL
MyTinySTL copied to clipboard
Achieve a tiny STL in C++11
如题,机制类似: ```C++ struct Guard { ContainerType* p_container_; ~Guard() { if (p_container_) p_container_->rollback_operation(); } }; ``` 在需要异常回滚的代码之前创建一个 `Guard` 对象: ```C++ Guard guard_{this}; ``` 在操作成功后将防护废弃掉: ```C++ guard_.p_container_ = nullptr; ```
通过 initializer_list 初始化的时候,为什么不把参数分为 `const std::initializer_list &ilist` 和 `std::initializer_list &&ilist` 两种拷贝构造参数呢? 而是使用下面的这种方式,这是有什么顾虑吗 ```cpp vector(std::initializer_list ilist) { range_init(ilist.begin(), ilist.end()); } ```
### 逻辑问题 1. 目前空终止符(末尾的 `\0`、 `L\0` 等)的设置是惰性的。这与标准要求不合,并且可能有并发调用 `const` 限定函数导致数据竞争的问题; 2. `capacity()` 的返回值应该是当前分配的存储中能放下的**字符串元素**数,**元素不含末尾的空终止符**(此处与 Jonathan Wakely 确认过)。所以目前实现的值多了 `1` 。 3. 各种插入操作在需要扩容时有可能提前将旧存储释放。而标准是允许插入的范围是就是字符串原先的一部分的,这可能导致问题。 ### 优化问题 1. 复制赋值运算符在 `rhs.size() capacity()` 时不应分配新存储。 2. `operator+` 可以在一些情况不分配新存储。
https://github.com/Alinshans/MyTinySTL/blob/8d88c6e41590e49fb91782711f78d8ab1d5e88e4/MyTinySTL/vector.h#L727 这里如果异常释放新内存,不调用destory直接调用deallocate感觉会造成内存泄漏 ` data_allocator::destory(newStart, newFinish); data_allocator::deallocate(newStart, newCapacity); `
c++新手,primer看完了一半,看了一两天这个代码了,还没搞懂,里面用了好多的宏定义,这个看起来好费力,第一次见这么多的宏定义和头文件保护。想问下大家都是多久吃透了这个项目?
https://github.com/Alinshans/MyTinySTL/blob/8d88c6e41590e49fb91782711f78d8ab1d5e88e4/MyTinySTL/uninitialized.h#L194 请问大佬,unchecked_uninit_move这个函数如果vector的 reallocate_emplace 调用了该函数,但是移动了一部分的元素发生了异常,这时候那部分已经移动的元素该怎么处理呢,我看这个函数是光destory了新对象,但是并没有throw
![Uploading 81个元素.png…]() 光标还未到创建语句,instance的保存案例集合就已经有81个元素了。
关于哈希表
哈希表使用开链法查找数据不够快,希望尽量用探测法去解决哈希冲突 两个其实都可以,各有各的好处,你把它分成两个类模版:cc_hash_table和gp_hash_table(对应开链法和探测发)
感觉上这样会让rb_tree把自己当作一个map,选择使用错误的rb_tree_value_traits_imp