生活随笔
收集整理的這篇文章主要介紹了
笔记,Vector类模板的基本功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有基本的查找,排序,插入,刪除區間,擴容,減容等
放在博客上主要是為了以后學習方便查找一些,實際上并沒有上面參考價值,許多STL模板中有的東西我這并沒有。
#include <bits/stdc++.h>
using namespace std
;typedef int Rank
;
#define DEFAULT_CAPACITY 3
template < typename T
> class Vector {private:
protected:public:Rank _size
;int _capacity
;T
* _elem
;Vector
( int c
= DEFAULT_CAPACITY
) {_elem
= new T
[_capacity
=c
];_size
= 0;}Vector
( T
const *A
, Rank lo
, Rank hi
) {copyFrom
(A
, lo
, hi
);}Vector
( Vector
< T
> const & V
, Rank lo
, Rank hi
) {copyFrom(V
._elem
, lo
, hi
);}Vector
( Vector
< T
> const & V
) {copyFrom(V
._elem
, 0, V
._size
);}void copyFrom(T
* const A
, Rank lo
, Rank hi
) {_elem
= new T
[_capacity
=2*(hi
-lo
)];_size
= 0;while ( lo
< hi
)_elem
[_size
++] = A
[lo
++];}void expand
() {if(_size
< _capacity
) return ;_capacity
= max(_capacity
,DEFAULT_CAPACITY
);T
* oldElem
= _elem
;_elem
= new T
[_capacity
<<=1];for(int i
= 0; i
< _size
; i
++ )_elem
[i
] = oldElem
[i
];delete [] oldElem
;}void shrink() {if (_size
>= _capacity
/2) return ;T
* oldElem
= _elem
;_elem
= new T
[_capacity
>>=1];for(int i
= 0; i
< _size
; i
++)_elem
[i
] = oldElem
[i
];delete [] oldElem
;}int binsearch(T
const & e
,Rank lo
,Rank hi
) {while(lo
< hi
) {Rank mid
= (lo
+hi
) >> 1;if ( _elem
[mid
] < e
) lo
= mid
+1;else if ( _elem
[mid
] > e
) hi
= mid
;else return mid
;}return -1;}int upperbound(Rank lo
,Rank hi
,const T
& e
) {while(lo
< hi
) {Rank mid
= (lo
+hi
) >> 1;if(_elem
[mid
] <= e
) lo
= mid
+1;else hi
= mid
;}return lo
;}int lowerbound(Rank lo
, Rank hi
, const T
& e
) {while(lo
< hi
) {Rank mid
= (lo
+hi
)>>1;if(_elem
[mid
] < e
) lo
= mid
+1;else hi
= mid
;}return lo
;}int find(T
const A
) {for(int i
= 0; i
< _size
; i
++)if(_elem
[i
] == A
)return i
;return -1;}int find(T
const &e
,Rank lo
,Rank hi
) {while((lo
< hi
-- ) && _elem
[hi
] != e
);return hi
;}operator [] (Rank r
) {return _elem
[r
];}void insert(Rank r
, T
const &e
) {expand();for(int i
= _size
;i
>r
;i
--)_elem
[i
] = _elem
[i
-1];_elem
[r
] = e
;_size
++;
}int remove(Rank lo
, Rank hi
) {if(lo
== hi
) return 0;while(hi
< _size
) _elem
[lo
++] = _elem
[hi
++];_size
= lo
;shrink
();
}T
remove(Rank r
) {T e
= _elem
[r
]; remove
(r
, r
+1);return e
;}int discoriered() const {int n
= 0;for(int i
= 1; i
< _size
; i
++)n
+=(_elem
[i
-1] > _elem
[i
]);return n
;}
int uniquify() {int i
= 0, j
= 0;while(++j
< _size
)if( _elem
[i
] != _elem
[j
]) _elem
[++i
] = _elem
[j
];_size
= ++i
;shrink();return j
- i
;}void Sort(Rank lo
,Rank hi
) {switch( rand() % 6 ) {case 0: quicksort( lo
, hi
); break; case 1: bubblesort1( lo
, hi
); break;case 2: bubblesort2( lo
, hi
); break;case 3: bubblesort3( lo
, hi
); break;case 4: selectsort( lo
, hi
); break;case 5: mergesort( lo
, hi
); break;}}void bubblesort1(Rank lo
, Rank hi
) {for(int i
= lo
; i
< hi
; i
++)for(int j
= i
+1; j
< hi
; j
++)if(_elem
[j
] < _elem
[i
])swap(_elem
[i
] , _elem
[j
]);}void bubblesort2(Rank lo
,Rank hi
) {while( !bubble2(lo
, hi
--)); }bool bubble2(Rank lo
, Rank hi
) {bool sorted
= true;while(++lo
< hi
)if(_elem
[lo
-1] > _elem
[lo
]) {sorted
= false;swap(_elem
[lo
-1], _elem
[lo
]);}return sorted
;}void bubblesort3(Rank lo
,Rank hi
) {while(lo
< (hi
= bubble3
(lo
,hi
) ) );}Rank
bubble3(Rank lo
, Rank hi
) {Rank last
= lo
;while(++lo
< hi
)if(_elem
[lo
-1] > _elem
[lo
]) {last
= lo
;swap(_elem
[lo
-1], _elem
[lo
]);}return last
;}void selectsort(Rank lo
, Rank hi
) {for(; lo
< hi
; lo
++)for(int j
= lo
+1; j
< hi
; j
++)if(_elem
[j
] < _elem
[lo
])swap(_elem
[j
], _elem
[lo
]);}void mergesort(Rank lo
,Rank hi
) {if(hi
-lo
< 2) return ;int mid
= (lo
+ hi
) >> 1;mergesort(lo
, mid
);mergesort(mid
, hi
);merge(lo
, mid
, hi
);}void merge(Rank lo
,Rank mid
,Rank hi
) {T
* A
= _elem
+lo
;int lb
= mid
-lo
;T
* B
= new T
[lb
];for(Rank i
= 0;i
< lb
; B
[i
] = A
[i
++]);int lc
= hi
- mid
;T
* C
= _elem
+ mid
;for(Rank i
= 0, j
= 0, k
= 0; (j
< lb
) || (k
< lc
);) {if( (j
< lb
) && ( lc
<= k
|| ( B
[j
] <= C
[k
]) ) ) A
[i
++] = B
[j
++];if( (k
< lc
) && ( lb
<= j
|| ( C
[k
] <B
[j
]) ) ) A
[i
++] = C
[k
++];}}void quicksort(Rank lo
, Rank hi
) {if(lo
>= hi
- 1) return ;Rank i
= lo
- 1, j
= hi
;T x
= _elem
[lo
+ hi
>> 1];while(i
< j
) {do i
++ ; while(_elem
[i
] < x
);do j
-- ; while(_elem
[j
] > x
);if(i
<j
) swap(_elem
[i
], _elem
[j
]);}quicksort(lo
, j
);quicksort(j
, hi
);}
};
int main() {Vector
<int>a
;int b
[10] = {10,9,8,7,6,5,4,3,2,1};a
.copyFrom(b
,0,10);for(int i
= 0; i
< a
._size
; i
++)cout
<< a
._elem
[i
] << " ";cout
<< endl
;a
.Sort(0, 10);for(int i
= 0; i
< a
._size
; i
++)cout
<< a
._elem
[i
] << " ";cout
<< endl
;cout
<< a
.find(1) << endl
;cout
<< a
[a
.find(1)] << endl
;cout
<< a
[9] << endl
;cout
<< a
.find(3,0,10) << endl
;a
.insert(0,0);for(int i
= 0; i
< a
._size
; i
++)cout
<< a
._elem
[i
] << " ";cout
<< endl
;cout
<< a
.discoriered() << endl
;cout
<< a
.binsearch(10,0,a
._size
) << endl
;cout
<< a
.upperbound(0,a
._size
,5) << endl
;cout
<< a
.lowerbound(0,a
._size
,5) << endl
; return 0;
}
總結
以上是生活随笔為你收集整理的笔记,Vector类模板的基本功能的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。