1、插入数据
void push_back(const T& x)
在当前vector尾部插入x,如果容量不够扩大二倍。
iterator insert(iterator pos, const T& x)
在POS位置插入元素x
2、容量相关
size_t capacity()
返回当前vector的容量(size+剩余容量)
size_t size()
返回当前vector的元素个数
void resize(size_t n, const T& val = T())
改变当前vector的size,如果n>size则大于部分初始值为val。(capacity的大小始终保持不变)
void reserve(size_t n)
改变当前vector的capacity,如果n
3、删除数据
void pop_back()
如果vector不为空,删除当前vector的最后一个元素
iterator erase(iterator pos)
删除POS位置的元素
4、运算符重载
T& operator[](size_t pos)
[]运算符重载,支持使用下标访问vector
#include#include #include using namespace std; namespace myvector { template class vector { public: typedef T* iterator; iterator begin() { return start; } iterator end() { return finish; } //默认构造函数 vector() :start(nullptr) , finish(nullptr) , end_of_storage(nullptr) {} //容量 size_t capacity() { return end_of_storage - start; } size_t size() { return finish - start; } void reserve(size_t n) { if (n > capacity()) { //开新空间 T* tmp = new T[n]; //拷贝旧空间的内容 memcpy(tmp, start, sizeof(T)*size()); //改变容量 finish = tmp + size(); end_of_storage = tmp + n; //释放旧空间 T* tmp1 = start; start = tmp; tmp = nullptr; } } void resize(size_t n, const T& val = T()) { //判断容量 if (n > capacity()) reserve(n); //如果n = start && pos <= finish); size_t pos1 = pos - start; check_capacity(); //解决迭代器失效 pos = start + pos1; //移动数据 iterator end = finish; while (end >= pos) { *(end + 1) = *end; end--; } //插入数据 *pos = x; finish++; return pos; } //删除数据 void pop_back() { assert(finish > start); finish--; } iterator erase(iterator pos) { assert(pos >= start && pos
void test1() { //测试默认构造和析构函数 myvector::vectorv1; } void test2() { //测试push_back()、reserve、check_capacity、size、capacity myvector::vector v2; //插入至少五个数据,进行一次扩容,扩容间接对size和capacity以及check_capacity进行了测试 v2.push_back(1); v2.push_back(2); v2.push_back(3); v2.push_back(4); //v2.push_back(5); for (size_t i = 0; i ::iterator it = v2.begin(); it = v2.insert(it,0); it = v2.insert(it + 2, 10); for (size_t i = 0; i
1、在vector的接口中,使用insert插入数据时可能导致迭代器失效,具体如下
2、删除操作导致迭代器失效
3、迭代器失效的解决办法
1)在vector中,解决迭代器失效的办法是在插入、删除等可能会导致迭代器失效的地方,返回新的迭代器来解决迭代器失效。
到此这篇关于c++中vector的使用和模拟实现的文章就介绍到这了,更多相关c++ vector使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!