🔥个人主页: Forcible Bug Maker
🔥专栏: STL || C++
目录
前言
本篇博客主要内容:STL库中vector的模拟实现。
在之前完成string以及学习了vector一些接口函数的基础上,这个vector的实现相当于是一个奖励内容,并不困难。不过我们这里vector底层实现和上次string的有所不同,是通过三个指针_start
,_finish
和_end_of_storage
来维护这个模板类的。相信在看完今天vector的实现之后,能对C++的迭代器有更深的了解。
🔥vector需要实现的接口函数
由于涉及到了模板的内容,我们这次不会将vector实现的声明和定义分离。在后期模板进阶的阶段会进一步解答此问题,盲目将模板类的声明定义分离是很容易出错的(在对模板这部分内容不熟练的情况下)。
看看需要实现的接口函数:
#pragma once
#include<iostream>
#include<algorithm>
#include<cassert>
using namespace std;
namespace ForcibleBugMaker
{
template<class T>
class vector
{
public:
// 这里vector的迭代器是一个原生指针
typedef T* iterator;
typedef const T* const_iterator;
//迭代器获取接口
iterator begin();
iterator end()
const_iterator cbegin()const;
const_iterator cend() const;
// 交换vector对象
void swap(vector<T>& v);
// 构造函数,析构函数以及赋值运算符重载
vector();
vector(int n, const T& value = T());
template<class InputIterator>
vector(InputIterator first, InputIterator last);
vector(const vector<T>& v);
vector<T>& operator=(vector<T> v);
~vector();
// 容量获取和调整接口
size_t size() const;
size_t capacity() const;
void reserve(size_t n);
void resize(size_t n, const T& value = T());
// 元素获取
T& operator[](size_t pos);
const T& operator[](size_t pos)const;