一个简单的Vector实现

C++ 的Vector类的简单实现 一代码 #include<algorithm> #include<iostream> #include <assert.h> using namespace std; template<typename T> class myVector { private: /*walk length*/ /*myVector each ti... 阅读详情

众所周知,STL库以高效而闻名。而且使用它可以很方便的实现我们的主要逻辑,不需要关心各种底层的实现细节。本文模拟实现了一个简单的vector容器。关于vector的介绍请移步:浅谈STL。
代码如下:

#ifndef _VECTOR_
#define _VECTOR_

#include<iostream>
#include<assert.h>
#include<memory.h>
using namespace std;

template<typename T>
class MyVector{
public:
    MyVector()
    {
        _array=new T[1];
        _size=0;
        _capacity=1;
    }
    MyVector(T* arr,size_t size)
    {
        if(arr==NULL)
        {
            MyVector();
            return;
        }
        _array=new T[size];
        int i;
        for(i=0;i<size;++i)
        {
            _array[i]=arr[i];
        }
        _size=size;
        _capacity=size;
    }
    ~MyVector()
    {
        delete[] _array;
        _array=NULL;
        _capacity=0;
        _size=0;
    }
    MyVector(const MyVector<T>& v)
    {
        _capacity=v._capacity;
        _size=v._size;
        _array=new T[this->_capacity];
        memmove(this->_array,v._array,sizeof(T)*this->_size);
    }
    MyVector& operator=(const MyVector<T>& v)
    {
        if(&v!=this)
        {
            T* tmp=new T[this->_capacity];
            memmove(tmp,this->_array,sizeof(T)*this->_size);
            swap(tmp,_array);
            delete[] tmp;
        }
    }
    void push_back(const T& t)
    {
        if(_size==_capacity)
            _Increase(_capacity*2);
        _array[_size++]=t;
    }
    void push_front(const T& t)
    {
        if(_size==_capacity)
            _Increase(_capacity*2);
        memmove(_array,_array+1,sizeof(T)*_size++);
        _array[0]=t;
    }
    void pop_back()
    {
        if(_size>0)
            _size--;
    }
    void pop_front()
    {
        if(_size>0)
            memmove(_array+1,_array,sizeof(T)*--_size);
    }
    T& operator[](size_t pos)
    {
        assert(pos<_size);
        return _array[pos];
    }
    size_t size()
    {
        return _size;
    }
    bool empty()
    {
        return _size<=0;
    }
    void resize(size_t size)
    {
        if(size<=_size)
            return;
        _Increase(size);
        _size=size;
    }
private:
    void _Increase(size_t size)
    {
        if(size<=_capacity)
            return;
        _capacity=size;
        T* tmp=new T[_capacity];
        memmove(tmp,_array,sizeof(T)*_size);
        swap(tmp,_array);
        delete []tmp;
    }
private:
    T* _array;
    size_t _capacity;
    size_t _size;
};
#endif

以上

如果你有任何想法或是可以改进的地方,欢迎和我交流!

完整代码及测试用例在github上:点我前往

本文首发于www.sbrave.cn

【完】

三菱FX3U PLC红绿灯ST编程实战:从基础逻辑到急停功能完整实现 本文以十字路口红绿灯控制为例,详细讲解了三菱FX3U PLC使用ST编程的完整实战过程。内容涵盖从基础时序逻辑、状态机设计,到急停功能、黄灯闪烁、昼夜模式切换等高级功能的实现,并提供了代码优化与调试技巧,帮助工程师掌握结构化文本在工业控制中的清晰、结构化应用。 阅读详情

相关推荐

把MinerU集成到Dify

本文介绍了如何将本地部署的MinerU与Dify平台进行集成。首先需要确保Dify和MinerU在Docker环境中正常运行,并通过配置虚拟网络实现互联。然后详细说明了在Dify平台安装MinerU插件的步骤,包括从插件市场搜索安装、配置连接参数等关键操作。特别强调了要等待MinerU容器完全启动(healthy状态)后再进行Dify配置,否则会出现连接错误。通过简单的URL指向和API密钥设置,用户即可实现Dify平台与本地MinerU算力网络的对接,为后续的AI应用开发提供基础支持。

lyxerlau的博客 313

C++ STL——vector使用

一、Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器,vector可以随机存取元素。vector在尾部添加或移除元素非常快速,但是在头部和中部进行操作时会比较费时。需要头文件。 二、vector对象的默认构造 #include<vector> vector<T>name; //默认构造形式 //↑ ↑ // 类型 变量名称 //例: vector<int> name1;//存放int的vector容器 vector<float&gt

weixin_45680994的博客 251

UVM对象实例化及覆盖的几种方法

UVM对象实例化的方法有多种,以下以object为例: 1)第一种:直接利用new函数进行实例化 trans t1; t1 = new("t1");//利用new函数进行实例化 2)第二种:uvm_component_registry中提供的方法type_id::create,此种方法也是最常使用的方法 trans t2; t2 = trans::type_id::create("t2",this); 3)第三种:uvm_factory中提供的方法creat_object_by_type trans t

沧月九流的博客 3376

三.vector的实现原理

文章目录一.vector的实现原理1.vector 基类介绍2.vector从最后面插入元素时发生了什么2.1对空vector插入一个元素2.2vector当前内存用完时插入4.vector删除元素内存会被释放吗4.1从容器最后删除4.2从容器中间删除5.vector如何修改某个位置的元素值6.vector读取与插入元素的时间复杂度7.vector基本算法8.vector底层实现总结二.vector的注意事项3. vector的迭代器会失效的原因4. vector怎么迅速的释放内存4.1 通过swap函数4

小呆鸟blog 5418

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南)

本文详细介绍了如何使用VSCode搭配Keil进行STM32开发,从环境配置到代码跳转的全流程指南。通过安装必备插件和正确配置项目文件,开发者可以在VSCode中享受现代编辑器的便捷功能,同时保留Keil的编译调试能力,提升嵌入式开发效率。

weixin_28832121的博客 253

Pyinstaller 打包 Pyzbar 时缺失 DLL 文件的排查与修复指南

本文详细解析了使用Pyinstaller打包Pyzbar库时,因缺失关键DLL文件导致程序闪退的常见问题。文章提供了从问题复现、错误诊断到最终修复的完整解决方案,核心在于通过修改.spec配置文件,手动将缺失的libzbar-64.dll等文件添加到打包过程中,确保生成的可执行文件能独立运行。

wdx012345的博客 504

详解Vector

Vector是实现了List接口的子类,其底层是一个对象数组,维护了一个elementData数组,是线程安全的,Vector类的方法带有synchronized关键字,在开发中考虑线程安全中使用Vector。Vector的底层实现也是数组,在不指定初始容量的情况下,默认初始数组大小为10,其扩容机制为当指定了增量的时候,新扩容的容量=旧数组长度+容量;如果没有指定增量,新扩容容量=旧数组长度*2。Vector是线程安全的,因为它对很多方法都加锁了。......

weixin_47382783的博客 4304

台球 PCOL:极致物理还原的网页斯诺克引擎(附源码深度解析)

*完整源码地址**:[https://github.com/billiards/pcol-core](https://github.com/billiards/pcol-core)(包含详细文档与示例)通过这个项目,我们不仅创建了一个游戏,更构建了一个**可扩展的物理引擎框架**,为网页端复杂物理模拟开辟了新的可能性。**在线体验**:[https://pcol.billiards](https://pcol.billiards)(支持移动端触控操作)clone.velocity.x *= -0.92;

Loving_enjoy的博客 2797

vector实现

vector实现 进来瞧瞧吧

xbhinsterest11的博客 1245

材料仿真软件:LAMMPS_(8).温度和压力控制

在 LAMMPS 中,温度和压力的控制是通过多种恒温器和恒压器实现的。Nose-Hoover 恒温器和恒压器因其准确性和广泛适用性而被经常使用,而 Berendsen 恒温器和恒压器则因其计算效率高而适用于初步仿真或粗粒化模型。温度重标和压力重标方法虽然简单,但在某些情况下可以快速调整系统的温度和压力。通过选择合适的控制方法,可以根据具体的需求和系统特性来设计和运行分子动力学仿真,从而获得准确和可靠的结果。在实际应用中,建议先进行初步的仿真以确定合适的控制参数,然后再进行细致的仿真以验证结果的稳定性。

kkchenjj的博客 1692

为什么先进工艺需要check那么多corner?

那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。

芯冰乐 2087

vector模拟实现

💖 作者简介:大家好,我是菀枯😜💬格言:不要在低谷沉沦自己,不要在高峰上放弃努力!☀️大家在学习C++的时候一定会学到STL(标准模板库),这是C++标准库中最重要的组成部分,它包含了常用的数据结构和算法。今天呢,我们首先来学习STL中的vector容器vector的数据安排和操作方式与我们平时使用的数组非常相似,唯一的区别在于数组是一个固定空间,而vector的空间可以随着元素的改变而发生改变。还是和之前一样,vector的使用方式大家可以去查阅官方文档欢迎各位参考与指导!!!

m0_60447315的博客 1509

【Unity】网络游戏实战(序章)MMORPG大型多人在线角色扮演 + 中国象棋联网对战

本系列会基于两种常见的网络游戏类型(MMORPG大型多人在线角色扮演和多人棋牌),从零开始实现网络游戏开发中的大多数环节。【杜绝代码炫技】本系列杜绝代码炫技,摈弃那些高深的设计模式,一切业务逻辑的实现代码追求浅显易懂,即便是网络编程菜鸟,也能循序渐进掌握本系列的核心要点。【授之鱼也授之渔】与一些开源库那样只授予源码不同,本系列还会基于各个技术要点展开详解,并结合切实的可直接运行的Demo,授之鱼更授之渔。

神码编程 1962

如何实现一个简单的vector

vector其实就是一个动态增长的数组,空间的变化由容器自动管理,而且vector会分配一些额外的空间来适应可能得增长,这种策略在一定程度上减少了扩容的次数,毕竟扩容的代价可不小。我们模仿SGI版本的STL来实现一个小型的vector,SGI版本的vector用三个迭代器维护一个vectorstart指向第一个有效数据finish指向最后一个有效数据的下一个位置end_of_storage指向空间的结束位置。

知其然 知其所以然 972

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

vector简单模拟实现

简单模拟实现vector

分享 C/C++、Linux、网络的学习历程与实操心得~ 不追求一蹴而就,只坚持日积月累。未来还将拓展更多技术领域,愿与所有热爱技术的伙伴一起,在探索中成长,在坚持中进步! 1001

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

vector的简单实现

vector实现必备技巧。

2301_81361707的博客 879

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

实现一个简单的vector

实现一个简单的vector 实现std vector 内的基础功能 实现迭代器和反向迭代器

turbolove的博客 540

详细讲解vector的简单模拟实现

所以这就是问题所在,是拷贝导致的问题,那么我们就需要去修改扩容时对值的拷贝。有一种简单的办法。直接赋值拷贝,对于内置类型直接给值,对于。

Vksdem的博客 984

简单vector实现

参考 c++ primer 5th ,stl 源码剖析 // myVector.cpp : 简单的vector实现。 // #include "stdafx.h" #include #include #include using namespace std; template class Vector { public: typedef T value_type;

skctvc15的专栏 679

vector 简单模拟实现

元素,并且自定义类型元素中涉及到。

m0_68142120的博客 856

vector简单实现

std::vector 是 C++ 标准库中的一个动态数组容器类,std::vector 可以动态调整其大小,因此在需要频繁尾插尾删的场景下非常有用

MindbniM的博客 1027

c++ vector的简单实现

vector的简单实现, 实现了简单迭代器 // 文件名:kkvector.h #ifndef __VECTOR_H__ #define __VECTOR_H__ #include <algorithm> template <typename Object> class vector { public: static const int kSpareSize =...

KingKongSCastle的博客 377

vector的简单实现及常用接口

vector类代表的是大小可以变化的数组,常见的有,增,删,查,改几个接口(功能),以及vector迭代器的使用。

chuxinweihui的博客 1024

一个简单的vector模版,实现了vector的简单功能

3 月 01 日 2.68 亿 3 月 02 日 2.49 亿 3 月 03 日 2.14 亿 3 月 04 日 2.11 亿 3 月 07 日 1.32 亿 3 月 08 日 1.91 亿 3 月 09 日 1.51 亿 3 月 10 日 1.36 亿 3 月 11 日 5.07亿

575

【C++ STL】vector容器的简单模拟实现

vector是最常用的标准库容器。一个vector就是一个给定类型元素的序列,元素在内存中是连续存储的:vector的大小是可以动态改变的,而且它的大小会被容器自动处理。与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效。它可以采用下标对元素进行访问,因此在末尾添加和删除元素相对高效,对于其它不在末尾的删除和插入操作,效率更低。构造函数声明接口说明vector()无参构造构造并初始化n个val拷贝构造。

luoshashou_123的博客 1123

【C++】vector用法&&简单模拟实现

vector的文档介绍(包含函数接口使用)(constructor)构造函数声明接口说明vector()(重点)无参构造构造并初始化n个val(重点)拷贝构造使用迭代器进行初始化构造it!it ++) {//无参构造 for(int i = 0;i < 10;i ++) {//使用迭代器进行初始化构造 printVector(v2);//构造并初始化10个100 printVector(v3);//拷贝构造 printVector(v4);return 0。

记录学习点滴 2028
上一篇: 一个简单的List实现
下一篇: 所有HTTP返回码
SmartBrave
博客等级 码龄12年 25粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值