首页 > 其他分享 >STL之手撕vector

STL之手撕vector

时间:2024-09-25 12:22:54浏览次数:1  
标签:arr MyVector capacity STL 之手 int vector return size

前言

面试的时候遇到了,是从来没想过会出问题的手撕。竟然在面试环节下出了不少纰漏。

要点

  • 构造函数:默认构造、拷贝构造、赋值运算符重载、移动构造函数、析构函数
  • push_back/pop_back

代码

  #include <iostream>
  using namespace std;
  #define DEFAULT_CAP (200)
  class MyVector
  {
  private:
  	int* arr;
  	int size;
  	int capacity;

  	void more_capacity() {
  		capacity += DEFAULT_CAP;
  		int *tmp = new int[capacity];
  		for (int i = 0; i < size; ++i) {
  			tmp[i] = arr[i];
  		}
  		delete[] arr;
  		arr = tmp;
  		tmp = nullptr;
  		return;
  	}
  public:
  	MyVector() {
  		arr = nullptr;
  		size = 0;
  		capacity = 200;
  		return;
  	}

  	MyVector(int _size) {
  		size = _size;
  		capacity = (size < DEFAULT_CAP) ? DEFAULT_CAP : ((size - 1) / DEFAULT_CAP) * DEFAULT_CAP + DEFAULT_CAP;
  		arr = new int[capacity];
  		return;
  	}

  	MyVector(const MyVector& _v) {
  		size = _v.size;
  		capacity = _v.capacity;
  		arr = new int[capacity];
  		for (int i = 0; i < size; ++i) {
  			arr[i] = _v.arr[i];
  		}
  		return;
  	}

  	MyVector(MyVector&& _v) {
  		size = _v.size;
  		capacity = _v.capacity;
  		arr = _v.arr;
  		_v.arr = nullptr;
  		return;
  	}

  	MyVector& operator=(const MyVector& _v) {
  		if (this == &_v) {
  			return *this;
  		}
  		delete[] arr;
  		size = _v.size;
  		capacity = _v.capacity;
  		arr = new int[capacity];
  		for (int i = 0; i < size; ++i) {
  			arr[i] = _v.arr[i];
  		}
  		return *this;
  	}

  	void push_back(int val) {
  		if (size == capacity) {
  			more_capacity();
  		}
  		arr[size++] = val;
  		return;
  	}

  	void pop_back() {
  		--size;
  		return;
  	}

  	void show() {
  		cout << capacity << " " << size << " " << endl;
  	}
  };

标签:arr,MyVector,capacity,STL,之手,int,vector,return,size
From: https://www.cnblogs.com/GaogaoBlog/p/18431066

相关文章

  • 【C++】vector-1
    文章目录1.vector的介绍及使用1.1vector的介绍1.2vector的使用1.2.1vector的定义1.2.2vectoriterator的使用1.2.3vector空间增长问题1.2.4vector增删查改1.vector的介绍及使用1.1vector的介绍1.vector是表示可变大小数组的序列容器。2.就像数组一样,vec......
  • 好用!推荐一个开源加密库 Bouncy Castle
    BouncyCastle是一个广泛使用的开源加密库,它为Java平台提供了丰富的密码学算法实现,包括对称加密、非对称加密、哈希算法、数字签名等。这个库由于其广泛的算法支持和可靠性而备受信任,被许多安全应用和加密通信协议所采用。主要特点和功能包括:算法支持:BouncyCastle支持多种密码学......
  • 【C++】STL详解之string类
    本次内容大纲:什么是STLSTL(standardtemplatelibaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL的版本原始版本AlexanderStepanov、MengLee在惠普实验室完成的原始版本,本着开源精神,他们声明允许任......
  • string和oj题以及vector的接口介绍
    前言上篇博客学习了一些string类的模拟实现erase、find、substr、比较大小、流输入、流输出,这篇博客将介绍剩下的一些string的知识以及vector的一些使用方式。string传统深拷贝的写法//拷贝构造string(conststring&s){ _str=newchar[s._capacity+1]; strcpy(......
  • C++:STL:String类常用函数介绍(附加部分重要函数的模拟实现)
    C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。如果我们经常在leetcode上刷OJ题,我们会发现字符串类型的题目基本都是......
  • 多线程之手撕生产者-消费者
    要点维护一个资源(在生产者-消费者中即流水线的位置)池,实现put()/get()两个函数。由于对信号量的操作是互斥的,要引入条件变量和信号量。实现资源池类Pool,成员变量:mtx:mutexcv:condition_variableque:queuecapacity:int实现资源池类Pool,成员函数:Tget():获取......
  • Vant之手机端上传图片只允许拍照上传
    1.开发拍照上传页面-andImgCapture.vue<template><div><van-buttonicon="plus"type="primary":disabled="disabled"@click.stop="clickCamera">拍照上传</van-button><divclass="carma-co......
  • [VLDBJ24] Survey of vector database management systems
    https://blog.csdn.net/Datawhale/article/details/1344535331.Intro非结构化数据压成\(D\)维向量五个问题:模糊搜索标准:向量不太适应模糊语义查询更多代价:\(O(D)\)内存消耗大:全要访问缺乏结构:(有结构的可以排序啥的index她不行)和属性不兼容(不太明白,可能是别的可以......
  • DS堆栈--逆序输出(不使用STL栈)
    题目描述请编写堆栈操作的具体实现代码,实现字符串的逆序输出,需自行实现堆栈。输入一个字符串,按字符按输入顺序压入堆栈,然后根据堆栈后进先出的特点,做逆序输出输入第一行输入t,表示有t个测试实例第二起,每一行输入一个字符串,注意字符串不要包含空格字符串的输入可参考如下......
  • std::vector 和 std::map 都支持以下比较运算符
    在C++标准库中,std::vector和std::map都支持以下比较运算符:==(相等运算符)!=(不等运算符)<(小于运算符)<=(小于等于运算符)>(大于运算符)>=(大于等于运算符)1.std::vector的比较对于std::vector,这些运算符通过词典序比较(lexicographicalcomparison)进行。词典序比较类似于字......