# 20120918-向量实现《数据结构与算法分析》

```#include <iostream>
#include <list>
#include <string>
#include <vector>
#include <bitset>
using namespace std;

template <typename Container,typename Object>
void change(Container & c,const Object & newValue)//改变新值
{
typename Container::ierator itr = c.begin();
while( itr != c.end())
{
*itr++ = newValue;
}
}

template <typename Container,typename Object>
void print(const list<int> & lst,ostream & out = cout)//打印值，并且归0
{
typename Container::iterator itr = lst.begin();
while( itr != lst.end())
{
cout<<*itr<<endl;
*itr=0;
itr++;
}
}

template <typename Container>
void printCollection( const Container & c)//打印任何容器
{
if (c.empty())
cout<<"(empty)";
else
{
typename Container::const_iterator itr = c.begin();
cout << "[" << *itr++;

while(itr != c.end())
{
cout << ","<<*itr++;
}

cout<<"]"<<endl;
}
}
template <typename Object>//Vector类向量实现
class Vector
{
public:
explicit Vector(int initSize = 0):theSize(initSize),theCapacity(initSize+SPARE_CAPACITY)
{
objects = new Object[theCapacity];
}
Vector(const Vector & rhs) : objects(NULL)
{
operator=(rhs);
}
~Vector()
{
delet [] objects;
}

const Vector & operator = (const Vector & rhs)
{
if(this != &rhs)
{
delete [] objects;
theSize = rhs.size();
theCapacity = rhs.theCapacity();

objects = new Object[ capacity() ];
for(int k=0; k<size() ; k++)
objects[k] = rhs.objects[k];
}
return *this;
}

void resize( int newSize)
{
if(newSize > theCapacity)
reserve( newSize*2+1);
theSize = newSize;
}

void reserve( int newCapacity)
{
if(newCapacity < theSize)
return;

Object *oldArray = objects;

objects = new Object[ newCapacity];
for( int k=0; k<theSize ; k++)
objects[k] = oldArray[k];

theCapacity = newCapacity;

delete [] oldArray;
}

Object & operator[](int index)
{
return objects[index];
}
const Object & operator[](int index) const
{
return objects[index];
}

bool empty() const
{
return size() == 0;
}
int size() const
{
return theSize;
}
int capacity() const
{
return theCapacity;
}

void push_back(const Object & x)
{
if(theSize == theCapacity)
reserve( 2 * theCapacity + 1 );
objects[theSize++] =x;
}

void pop_back()
{
theSize--;
}

const Object & back() const
{
return objects[theSize - 1];
}

typedef Object * iterator;
typedef const Object * const_iterator;

iterator begin()
{
return &objects[0];
}
const_iterator begin() const
{
return &objects[0];
}
iterator end()
{
return &objects[size()];
}
const_iterator end() const
{
return &objects[size()];
}

enum {SPARE_CAPACITY=16};

private:
int theSize;
int theCaacity;
Object *objects;
}
int main()
{
list<string> a;
list<int> b;
list<int> c;
c.push_back(123);
a.push_back("123");
a.push_back("ooo");
a.push_back("456");
a.push_back("ooo");
a.push_back("789");
printCollection(a);
printCollection(b);
printCollection(c);
return 0;
}```

前两部分是list的应用

后一部分是vector的实现方法：可惜我不会直接测试...不知道怎么直接用.....

今天不知道怎么的，莫名的很生气.....fuck

797 篇文章75 人订阅

0 条评论

## 相关文章

30960

### Leetcode 179 Largest Number

Given a list of non negative integers, arrange them such that they form the lar...

263100

### 对HashMap的思考及手写实现前言对HashMap的思考通过写一个迷你版的HashMap来深刻理解

HashMap是Java中常用的集合，而且HashMap的一些思想，对于我们平时解决业务上的一些问题，在思路上有帮助，基于此，本篇博客将分析HashMap底层设...

10220

### Leetcode 215. Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth larg...

228100

10620

5810

17330

7620

15630

75030