::create()
{
//分配空的数组
data_ = avail_ = limit_ = 0;
}
template
inline void Vector::create(size_type n, const T &val)
{
//分配原始内存
data_ = alloc_.allocate(n);
limit_ = avail_ = data_ + n;
//向原始内存填充元素
std::uninitialized_fill(data_, limit_, val);
}
template
inline void Vector::create(const_iterator i, const_iterator j)
{
data_ = alloc_.allocate(j-i);
limit_ = avail_ = std::uninitialized_copy(i, j, data_);
}
template
inline void Vector::uncreate()
{
if(data_)//逐个析构
{
iterator it = avail_;
while(it != data_)
{
alloc_.destroy(--it);
}
alloc_.deallocate(data_, limit_ - data_ );//真正释放内存
}
data_ = limit_ = avail_ = 0;//重置指针
}
template
inline void Vector::grow()
{
//内存变为2倍
size_type new_size = std::max(2 * (limit_ - data_), std::ptrdiff_t(1));
//分配原始内存
iterator new_data = alloc_.allocate(new_size);
//复制元素
iterator new_avail = std::uninitialized_copy(data_, avail_, new_data);
uncreate();//释放以前内存
data_ = new_data;
avail_ = new_avail;
limit_ = data_ + new_size;
}
template
inline void Vector::uncheckAppend(const T &val)
{
alloc_.construct(avail_++, val);
}
#endif /*VECTOR_H*/
test_main.cpp
#include "myvector.h"
#include
#include
using namespace std;
void print_reverse(Vector &vec)
{
cout << "reverse_iterator: " << endl;
for(Vector::reverse_iterator it = vec.rbegin();
it != vec.rend();
++it)
{
cout << *it << endl;
}
cout << endl;
}
void print(Vector &vec)
{
cout << "iterator: " << endl;
for(Vector::iterator it = vec.begin();
it != vec.end();
++it)
{
cout << *it << endl;
}
cout << endl;
}
int main(int argc, const char *argv[])
{
Vector vec(3, "hello");
for(Vector::const_iterator it = vec.begin();
it != vec.end();
++it)
{
cout << *it << endl;
}
cout << endl;
cout << "size=" << vec.size() << endl;
cout << "capacity:" << vec.capacity() << endl;
vec.push_back("foo");
vec.push_back("bar");
cout << "size:=" << vec.size() << endl;
cout << "capacity=" << vec.capacity() << endl;
print_reverse(vec);
print(vec);
return 0;
}
将C语言梳理一下,分布在以下10个章节中: