📄 ftvector.h
字号:
#ifndef __FTVector__#define __FTVector__#include "FTGL.h"/** * Provides a non-STL alternative to the STL vector */template <typename FT_VECTOR_ITEM_TYPE>class FTGL_EXPORT FTVector{ public: typedef FT_VECTOR_ITEM_TYPE value_type; typedef value_type& reference; typedef const value_type& const_reference; typedef value_type* iterator; typedef const value_type* const_iterator; typedef size_t size_type; FTVector() { Capacity = Size = 0; Items = 0; } virtual ~FTVector() { clear(); } FTVector& operator =(const FTVector& v) { reserve(v.capacity()); iterator ptr = begin(); const_iterator vbegin = v.begin(); const_iterator vend = v.end(); while( vbegin != vend) { *ptr++ = *vbegin++; } Size = v.size(); return *this; } size_type size() const { return Size; } size_type capacity() const { return Capacity; } iterator begin() { return Items; } const_iterator begin() const { return Items; } iterator end() { return begin() + size(); } const_iterator end() const { return begin() + size(); } bool empty() const { return size() == 0; } reference operator [](size_type pos) { return( *(begin() + pos)); } const_reference operator []( size_type pos) const { return( *(begin() + pos)); } void clear() { if( Capacity) { delete [] Items; Capacity = Size = 0; Items = 0; } } void reserve( size_type n) { if( capacity() < n) { expand(n); } } void push_back(const value_type& x) { if( size() == capacity()) { expand(); } ( *this)[size()] = x; ++Size; } void resize(size_type n, value_type x) { if( n == size()) { return; } reserve(n); iterator begin, end; if( n >= Size) { begin = this->end(); end = this->begin() + n; } else { begin = this->begin() + n; end = this->end(); } while( begin != end) { *begin++ = x; } Size = n; } private: void expand(size_type capacity_hint = 0) { size_type new_capacity =( capacity() == 0) ? 256 : capacity()* 2; if( capacity_hint) { while( new_capacity < capacity_hint) { new_capacity *= 2; } } value_type *new_items = new value_type[new_capacity]; iterator begin = this->begin(); iterator end = this->end(); value_type *ptr = new_items; while( begin != end) { *ptr++ = *begin++; } if( Capacity) { delete [] Items; } Items = new_items; Capacity = new_capacity; } size_type Capacity; size_type Size; value_type* Items;};#endif // __FTVector__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -