设为首页 加入收藏

TOP

C++中vector的实现(二)
2014-11-23 19:38:31 来源: 作者: 【 】 浏览:30
Tags:vector 实现
plate
inline void Vector::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个章节中:


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C語言 rand函数 进阶探讨与实现 下一篇HTML5入门基础教程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: