1.vector容器 vetcor顾名思义就是一个向量的容器,该容器中的每个元素都属于同一个类型,有点类似于数组,vetor容器与数组的不同之处就在于,它具有“动态”的属性,举例来说,如果定义了一个vector...vector容器的常规操作有: 初始化 vectora(10) vector :说明这是一个什么容器 int : 说明这个容器里面放的是什么类型的东西 a: 容器名 (10); 这个容器有多大...vectora(10,995) //这个容器一共有10元素,每个元素的值都是998 访问vector 下标 at方法 其他 a[10] //访问第11个元素 a.at(4) //访问第...5个元素 a.back(); //返回a的最后一个元素 a.front(); //返回a的第一个元素 遍历vector中的元素 迭代器 for(auto it = a.begin(); it !...利用下标 for(auto i = 0; i < a.size(); ++i) cout<<a[i]<<" "; cout<<endl; 注意 .size()方法可以获取vector
humanking7/article/details/80787279 ---- 1.来源 2.源码 2.1.源码: QVector.h 2.2.测试 main.cpp ---- 1.来源 本例程主要是实现...vector类,来源于《数据结构与算法分析:C++描述》中。...实现了题3.7和3.8中的添加索引时的边缘检测功能和添加了insert()和eraser()功能。...对于该例子中,Vector类的迭代器实际上是一个指针变量,在题3.9中要求应该定义一个迭代器类型,并且实现严格的迭代器检验,这部分在后续中实现,现在Vector类的迭代器实际上是一个Object *类型...SPARE_CAPACITY) { objects = new Object[theCapacity]; } Vector(const Vector & rhs)
vector的介绍及使用 1.vector的介绍 https://cplusplus.com/reference/vector/vector/ vector是表示可变大小数组的序列容器 就像数组一样,.../reference/vector/vector/ vector在实际中非常的重要,在实际中我们熟悉常见的接口就可以,下面列出了哪些接口是要重点掌握的 2.1 vector的定义 2.2 vector...深度剖析及模拟实现 3.1 使用memcpy拷贝问题 假设模拟实现的vector中的reserve接口中,使用memcpy进行的拷贝,以下代码会发生什么问题?...(size_t n) { // 使用vector定义二维数组vv,vv中的每个元素都是vectorvectorvector> vv(n); // 将二维数组每一行中的vecotr...类型的,每行没有包含任何元素,如果n为5时如下所示: vv中元素填充完成之后,如下图所示: 使用标准库中vector构建动态二维数组时与上 3.3 代码实现 由于vector实例化的时候需要类型,所以在命名空间中用类模板进行实现
二、vector的实现 2.1 vector中的私有变量 前面我们提到过,将类中的的变量私有防止被访问修改。...所以这就是为什么vector是用指针实现对数组增删查改的的原因。...对reserve()函数的功能有不同的实现方式,这也就导致了在有些编程环境下可以缩容,有些编程环境只能用来扩容。...既然将他们放在一块讲解实现,那肯定是他们有互补之处。Erase函数肯定也是可以根据位置做出改变的值。...其实大家实现的时候不用搞这个Add,小编当时只是想分析分析,多搞了个Add函数。
Vector同样继承自AbstractList,与ArrayList、LinedList一样,是List的一种实现。 2 数据结构 ?...,具体实现如下: ?...而Vector如果在初始化的时候不设置这个值得话,每次扩容则在当前数组长度的基础上增加一倍,实现如下: ?...4 需要注意的方法 Vector作为List的一种实现,由于其与ArrayList一样使用对象数组来保存元素,所以其提供的方法与ArrayList基本类似,但是所有方法的定义都多了一个关键字...List集合时,使用Vector无疑是最佳选择,因为它的实现已经考虑了线程安全的问题。
联发科提前批难点记录 #ifndef _MY_VECTOR_HPP_ #define _MY_VECTOR_HPP_ template class MyVector {...public: // 构造函数 MyVector() { //这里默认数组大小为10 //但是vector文件中默认构造的方式是0, 之后插入按照...= 10; _size = 0; } ~MyVector() { delete[] data; } //reserve只是保证vector...但不会释放内存 delete[] data; data = newData; _capacity = st; } }; #endif //_MY_VECTOR_HPP
上一篇我们对vector一些常用的函数进行了讲解,本篇博客我们就对vector进行模拟实现,以便于我们更好地了解vector的使用以及对一些常见bug的认识 有了string类的模拟实现,vector的模拟实现我们上手起来就简单一点了...: 首先为了和库里面的vector混淆视听,放入自己命名的空间里,并且根据vector的源码分析我们得出了三个成员变量: 分别是: 其实他们实质上都是指针,位置大概是这样的,遵循左闭右开的规则...size_t size() const { return _finish - _start; } pushback尾插函数 尾插函数在很多地方可以复用,所以我们首先解决了尾插,为后面的函数进行模拟实现提供了基础...pos) const { assert(pos < size()); return _start[pos]; } resize函数和reserve函数 其实我们可以将reserve先实现后直接将..._start = tmp; _finish = _start + sz; _endofstorage = _start + n; } } resize函数的扩容我们就用reserve来实现
//insert的模拟实现,vector中的insert是用迭代器实现的,库里会返回pos这个位置 iterator insert(iterator pos,const T&v) { assert(..._end); } =的模拟实现 vector&operator=(vector v) { swap(v); return *this; } vectorv(10,1)...//vectorv(10,1),模拟实现开10个空间,并初始化为1 vector(size_t n,const T&x=T())//匿名对象为了别的类也可以用 { resize(n, x)...,vector中的insert是用迭代器实现的 void text3() { Ljw::vector v; v.push_back(1); v.push_back(1); v.push_back..._end); } //=的模拟实现 vector&operator=(vector v) { swap(v); return *this; } //vector
@[TOC] vector就是一个顺序表而已,只不过它是类模板,可以实例化出不同的模板类。下面我们通过模拟实现来进一步的熟悉vector。...vector的成员变量 与顺序表的成员不一样,顺序表的成员变量是指向数组的一个指针,实际数据的大小,空间的容量。...cpp vector(const vector& v) { start = new T[v.size()]; for (size_t i = 0; i < v.size(); +...i = 0; i < sz; ++i) { tmp[i] = start[i];//要注意这里,当这里是自定义类型的时候,这里就是赋值(赋值运算符的重载,要自己实现一下...cpp vector& operator=(const vector& v) { if (start !
vector的介绍及使用 介绍 vector文档介绍 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。...(注意这个是算法模块实现,不是vector的成员接口) insert 在position之前插入val erase 删除position位置的数据 swap 交换两个vector的数据空间 operator...因此删除vector中任意位置上元素时,vs就认为该位置迭代器失效 了 底层实现 #pragma once #include namespace gwj_vector { template...(v3); } void test_vector5() { vector v1(10, 1); print_vector(v1); vector v2(10u,...1); print_vector(v2); vector v3(10, 'a'); print_vector(v3); } void test_vector6() {
一.了解项目功能 声明: 该模拟实现仅适用于STL初学小白了解vector的简单实现,会结合一些STL源码作为参照,但是源码中涉及的空间配置器部分我们不做涉及!...spm=1001.2014.3001.5502 二.逐步实现项目功能模块及其逻辑详解 通过第一部分对项目功能的介绍,我们已经对vector的功能有了大致的了解,虽然看似需要实现的功能很多...vector构造函数 实现无参构造函数 vector的无参构造函数比较简单,我们利用初始化列表将所有的迭代器都指向nullptr即可,无参构造函数代码如下: vector() :_start...& operator=(vector v) { swap(v); return *this; } 实现vector的begin()函数和end()函数 因为我们实现的vector...修改容量前后,vector在内存中的情况图示如下: 综上所述,reserve()函数实现代码如下(该实现包含两大陷阱错误): void reserve(size_t n) { //检查
无参默认构造 vector() :_start(nullptr) , _finish(nullptr) , _endofstorage(nullptr) {} 2. size size_t size...析构函数 ~vector() { if (_start) { delete[] _start; _start = _finish = _endofstorage = nullptr; }...(const vector& v) { reserve(v.capacity()); for (auto& e : v) { push_back(e); } } 16.赋值重载 //交换...void swap(vector& tmp) { std::swap(_start,tmp...._endofstorage); } //赋值重载 //v1 = v3; vector& operator=(vector v)//传值传参会调用拷贝构造,v3拷贝给v { swap(v);
前言 在之前已经介绍了vector【C++】vector介绍,这次来看看它的模拟实现。...,就得用到initializer_list initializer_list里面就包了迭代器: 所以模拟实现出来就是: vector(initializer_list il)...输出 想要实现不同类型的vector打印输出,就直接定义一个类模板template然后再写打印函数输出的时候把T代入: void print_vector(const vector<T...(v2); 这样不同类型的vector就都可以实现输出: 7....然后把erase实现里面把返回的位置更新一下就行: iterator erase(iterator pos) { assert(pos >= _start); assert(pos
> vector(InputIterator first, InputIterator last); ~vector(); vector& operator=(vector v);...模拟实现 vector成员变量 vector成员变量,和顺序表的成员变量有所不同,不再是指针、size和capacity了,而是迭代器 start、finish和end_of_storage。...(这个需要先实现交换函数) vector& operator=(vector v) { swap(v); return *this; } 注意事项: 在赋值的过程中没有使用...iterator 迭代器 vector 的迭代器这里实现的是原生指针;迭代器相关函数:begin()、end()这些都比较简单就不过多描述了。...模拟实现就结束了,希望你能有所收获 感谢各位大佬支持并指出问题 如果本篇内容对你有帮助,可以一键三连支持以下,感谢支持!!!
个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 本篇简介:>:模拟实现STL库中的vector部分接口,帮助大家更好的理解vector...iterator _finish; // 指向有效数据的尾 iterator _end_of_Storage; // 指向存储容量的尾 }; } 我们模拟实现的时候...iterator _start=nullptr; iterator _finish=nullptr; iterator _end_of_Storage=nullptr; 一、构造函数实现...T[n]; //拷贝旧数据 //memcpy(tmp, _start, sizeof(T) * sz); //这样内部就浅拷贝了 //实现外部和内部都是深拷贝...*tmp = *(tmp + 1); tmp++; } --_finish; return pos; } 本篇只是简单的模仿库中完成部分接口的实现
放在专栏【C++知识总结】,会持续更新,期待支持 1、vector的数据结构 这里我们与SGI版本保持一致,成员变量为三个迭代器,对一些常见接口实现模拟。...2.1.5、析构 析构函数的实现很简单,直接delete后,将迭代器置空即可: 2.2、迭代器相关 对于vector中的begin,返回其首地址即start,end返回finish即可。 ...我们知道,迭代器最重要的就是要实现对容器元素的访问,因此迭代器的++与解引用*操作十分重要,但是由于vector的迭代器是一个指针,而我们知道,指针本身就支持++与解引用操作,并且我们这里vector是一个连续的空间...,指针++会跳过一个T类型的大小,即会指向vector 中的下一个元素,因此这里我们不需要手动实现(指针本身自带)。...2.3、运算符重载 2.3.1、[]重载 我们知道vector是可以用下标来实现对元素的访问,这里我们对[]进行重载,使我们的vector也支持下标访问。不过在实现时需要注意避免下标越界。
vector支持很多种数据类型,故要定义成模板类 0、数据成员 长度 theSize 容量 theCapacity 指针 T* array 另外还要指定容量的增长步长 int theSize; int...theSize; i++ ) cout<<array[i]<<" "; cout<<",size="<<theSize<<" ,capacity="<<theCapacity<<endl; } 3、实现增删
实现以下功能: 构造函数:a.无参默认构造 b.n个val构造 c.迭代器区间构造 d.initializer_list构造,类似于数组 e.拷贝构造 =赋值重载...[ ]重载 实现reserve接口 实现size(),capacity()接口 实现push_bakc接口,尾插 实现insert接口,位置插入 实现erase接口,位置删除...实现pop_back接口,尾删 实现empty接口,判断容器是否为空 实现迭代器 #pragma once #include #include<iostream...=last) { push_back(*first); ++first; } } vector(size_t n, const T& val = T()..._endofstorage); } vector& operator=(vector v) { swap(v); return *this; }
成员变量与迭代器 我们还是需要在一个命名空间里模拟实现vector,防止和标准库里的起冲突。...所以我们的模拟实现要写成类模板。...2.vector可以看做顺序表的升级,但是模拟实现vector跟我们以往实现顺序表有所不同,顺序表是使用一个动态开辟的数组、数组有效元素个数size和数组容纳最大有效数据的个数capacity维护的,而模拟实现...要解决这个问题,我们就得手动实现深拷贝, 因为new出来的空间如果是自定义类型的话就自动调用构造函数初始化了,所以这里走的是赋值重载来实现深拷贝。...4 : 2 * capacity()); } //插入元素,更新_finish *_finish = x; _finish++; } 构造函数 vector的构造函数我们实现无参构造、迭代器区间构造和
delete=free+destructorp->~T();}};templateclass vector {public:vector() : begin_(nullptr),...= vec.end_; ++p, ++cur) {alloc->construct(cur, *p);}}vector(vector&& vec) {cout construct(cur, *p);}return *this;}vector& operator=(vector&& vec) {cout... vec1;vector vec2(2);vector vec3(vec2);vec2.push_back(1);vec2.push_back(2);cout vector vec5 = std::move(vec3);vector vec6 = {1, 2, 3};cout <<