1.string——近容器
vecotr容器(类似于数组)
void resize();//长度和实际长度(实际数据发生变化)
void reserve();//扩容(只改变长度)
2.使用模板实现vector
(1)mvector.h
#ifndef MVECTOR_H #define MVECTOR_H templateclass Mvector { public: Mvector() { _arr = NULL; _len = 0; _val_len = 0; } Mvector(const Mvector& src) { if (NULL == src._arr) { _arr = src._arr; _len = src._len; _val_len = src._val_len; } else { _len = src._len; _val_len = src._val_len; _arr = new T[_len]; for (int i = 0; i < _val_len; i++) { _arr[i] = src._arr[i]; } } } ~Mvector() { delete[]_arr; _arr = NULL; } Mvector& operator=(const Mvector& src) { //防止自赋值 if (&src == this) { return *this; } //防止内存泄漏 if (NULL != _arr) { delete[]_arr; } //防止浅拷贝 _len = src._len; _val_len = src._val_len; if (NULL != src._arr) { _arr = new T[_len]; } else { _arr = NULL; } for (int i = 0; i < _val_len; i++) { _arr[i] = src._arr[i]; } return *this; } void push_back(const T& val) { if (full()) { if (_len == 0) { _len = 1; } int len = _len << 1; reserve(len); } _arr[_val_len] = val; _val_len++; } void pop_back() { if (empty()) { return; } _val_len--; } T back()const { if (empty()) { return -1; } return _arr[_val_len-1]; } int size()const { return _val_len; } void resize(int len) { if (len < 0) { len = 0; } if (len == 0) { delete[]_arr; _arr = NULL; _len = 0; _val_len = 0; return; } T* arr = new T[len]; memset(arr, 0, len * sizeof(T)); for (int i = 0; i < len && i < _val_len;i++) { arr[i] = _arr[i]; } delete[]_arr; _val_len = len; _arr = arr; } void reserve(int len) { if (len <= _val_len) { return; } _len = len; T* arr = new T[_len]; for (int i = 0; i < _val_len; i++) { arr[i] = _arr[i]; } delete[]_arr; _arr = arr; } bool empty()const { return _val_len == 0; } T& operator[](int pos) { return _arr[pos]; } T operator[](int pos)const { return _arr[pos]; } private: bool full() { return _len == _val_len; } T* _arr; int _len; int _val_len; }; #endif
(2)main.cpp
#include#include #include #include"mvector.h" using namespace std; void show(Mvector & v) { for (int i = 0; i < v.size(); i++) { cout << v[i] << " "; } cout << endl; } int main() { Mvector v1; //cout << v1.back() << endl; int a = int(); for (int i = 0; i < 10; i++) { v1.push_back(i); } show(v1); v1.resize(20); show(v1); v1.resize(5); show(v1); v1.resize(10); show(v1); v1.reserve(10); show(v1); v1.reserve(2); show(v1); //cout << v1.max_size(); v1.pop_back(); show(v1); cout << v1.back(); v1.resize(-1); show(v1); return 0; }



