自定义简化版本的vector容器
2016-01-01 18:03
337 查看
[code] 实现一个简单的vector容器,容器中的元素只能容纳整数,默认初始化时,容器的大小为1,且把容器中每个元素的值初始化为0,当向容器中添加元素时,如果此时容器已满,则申请一个新的容器,其大小为原来容器的两倍,并把原先容器中的元素赋值到新容器中,然后再添加新的元素,最后把原来容器的空间给释放。两个容器之间可以相互拷贝,且可以用一个容器构造另一个新的容器。可以用[]操作符访问容器中的元素。其代码如下:
#include<iostream> using namespace std; class MyVector { public: //无参数构造函数 MyVector() :arr(new int[1]()),capacity(1),size(0) {} //初始化容器大小,容器中的元素初始化为0 MyVector(int len) :arr(new int[len]()),capacity(len),size(0) {} //赋值构造函数 MyVector(const MyVector &rhs) { this->arr = new int[rhs.capacity](); for(int i = 0; i < rhs.size; ++i) { this->arr[i] = rhs.arr[i]; } this->size = rhs.size; this->capacity = rhs.capacity; } //赋值操作符 MyVector& operator=(const MyVector& rhs) { if(this != &rhs) { MyVector tmp(rhs); int *tmp_arr = rhs.arr; tmp.arr = this->arr; this->arr = tmp_arr; this->capacity = rhs.capacity; this->size = rhs.size; } return *this; } //向容器中添加元素 void push_back(int val) { if(size < capacity) { arr[size++] = val; } else { capacity *= 2; int *arr_new = new int[capacity]; for(unsigned int i = 0; i < size; ++i) { arr_new[i] = arr[i]; } arr_new[size++] = val; delete arr; arr = arr_new; } } //重载操作符[] int& operator[](unsigned int len) { if(len >= size) { len = 0; } return arr[len]; } //重载操作符[] const int& operator[](unsigned int len)const { if(len >= size) { len = 0; } return arr[len]; } private: int *arr;//指向容器中元素的指针 unsigned int capacity;//容器的容量 unsigned int size;//容器中元素的个数 }; int main(void) { MyVector ve; ve.push_back(1); ve.push_back(2); ve.push_back(3); ve.push_back(4); ve.push_back(5); MyVector v2; v2.push_back(3); cout<<v2[2]<<endl; MyVector ve1(ve); ve = v2; system("pause"); return 0; }
相关文章推荐
- Android5.1 联系人号码搜索过程缓存原理
- C 语言之字符串处理函数一 -2016.01.01
- iPhone、iPad强制关机
- wind 7 配置示图
- ListView万能适配器
- vim+clipboard+vim-gui(gvim)源码编译
- Notepad++关联文件扩展名,修改字体大小
- toString--->转字符串
- 解决切换jdk编译android源码错误
- Maven Tomcat 部署
- TMS320F28335时钟(1) -----PLL倍频器的初始化详解
- BZOJ 4103 [Thu Summer Camp 2015]异或运算 可持久化Trie
- [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
- C++ 的名字查找(name lookup)
- lcp+dp Codeforces611D New Year and Ancient Prophecy
- android5.1中apn选项默认选择制式源码修改
- org.openqa.selenium.StaleElementReferenceException
- 前端学PHP之基础语法
- 启示录
- android5.1源码中加全局变量