实现自己的vector

本文详细介绍了一种自定义vector类的实现方式,该类模仿了C++标准库中的vector类,提供了基本的数据结构操作,如push_back、pop_back、insert等,并实现了反向迭代器。代码基于标准库<memory>进行内存分配,使用<iterator>构建反向迭代器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于标准库vector的介绍:http://www.cplusplus.com/reference/vector/vector/
 1 #pragma once
 2 
 3 #include<memory>
 4 #include<cassert>
 5 #include<algorithm>
 6 #include<iterator>
 7 
 8 template< class T, class Alloc = std::allocator<T> > class myvector
 9 {
10 public:
11     typedef T value_type;
12     typedef size_t size_type;
13     typedef ptrdiff_t difference_type;
14     typedef value_type& reference;
15     typedef const value_type& const_reference;
16     typedef value_type* pointer;
17     typedef const value_type const_pointer;
18     typedef value_type* iterator;
19     typedef const value_type* const_iterator;
20 protected:
21     std::allocator<value_type> _alloc;
22     iterator _start;
23     iterator _end;
24     iterator _end_of_storage;
25 
26 public:
27     myvector();
28     myvector(size_type n, const T& value);
29     myvector(size_type n);
30     myvector(iterator first, iterator last);
31     myvector(const myvector& v);
32     myvector& operator=(const myvector& rhs);
33     ~myvector();
34 
35     iterator begin() const;
36     iterator end() const;
37     const_iterator cbegin() const;
38     const_iterator cend() const;
39     std::reverse_iterator<iterator> rbegin() const;
40     std::reverse_iterator<iterator> rend() const;
41     std::reverse_iterator<const_iterator> crbegin();
42     std::reverse_iterator<const_iterator> crend() const;
43 
44     size_type size() const;
45     size_type capacity() const;
46     bool empty() const;
47     void swap(myvector& v);
48 
49     reference front() const;
50     reference back() const;
51     reference operator[] (size_type n);
52 
53     void push_back(const T& value);
54     void pop_back();
55     void insert(iterator position, size_type n, const T& value);
56 
57     iterator erase(iterator position);
58     iterator erase(iterator first, iterator last);
59     void clear();
60 
61 private:
62     void _destroy(iterator first, iterator last);
63     void insert_aux(iterator position, const T& value);
64 };

其中内存分配相关用的标准库<memory>,反向迭代器也直接用标准库<iterator>构造,没有做异常处理。

 

详细代码:https://github.com/Zzzy14/MyDataStructure/tree/master/MyVector

 

参考资料:1、https://github.com/yqtaowhu/DataStructureAndAlgorithm/blob/master/DataStructure/vector/myVector.h

     2、侯捷《STL源码剖析》

转载于:https://www.cnblogs.com/Zzz-y/p/9283549.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值