6 mySTL
6.1 复数类模板
-
complex<>
include/Complex.h
Test/complextest.cpp
6.2 容器
6.2.1 顺序容器
vector<>
list<>
deque<>
valarray<>
6.2.2 关联容器
pair<>
set<>
multiset<>
bitset<>
map<>
multimap<>
2.3 容器迭代器
stack<>
queue<>
priority_queuetest<>
6.3 算法
fill()、fill_n()、generate()、generate_n()、min()、max()、for_each()、find()、find_if()、count()、count_if()、equal()、advance()、distance()、copy()、
6.5 实例
#include <iostream>
#include <vector>
using namespace std;
namespace mySTL {
template <typename T>
class vector {
public:
typedef T data_type;
typedef T& reference;
typedef const T& const_reference;
typedef T* pointer;
typedef const T* const_pointer;
typedef size_t size_type;
typedef pointer iterator;
typedef const_pointer const_iterator;
private:
pointer m_pstart;
pointer m_pend; //size = m_pstart - m_pend;
pointer m_pcapacity; //capacity = m_pcapacity - m_pstart;
public:
vector():m_pstart(nullptr),m_pend(nullptr),m_pcapacity(nullptr) {}
vector(size_type n) {}
vector(size_type n,const_reference element) {}
vector(const vector& vec) {}
vector& operator==(const vector& vec) {
return *this;
}
bool operator==(const vector& vec)const {
return false;
}
data_type& operator[](size_type index) {
return m_pstart[index];
}
const data_type& operator[](size_type index)const {
return m_pstart[index];
}
~vector() {}
size_type size() {
return m_pend-m_pstart;
}
size_type capacity() {
return m_pcapacity-m_pstart;
}
bool empty(){
return size() == 0;
}
void push_back(const_reference element) {
if(empty()) {
m_pstart = new data_type[1];
m_pstart[0] = element;
m_pend = m_pstart+1;
m_pcapacity = m_pend;
} else {
size_type nsize = size();
size_type ncapacity = capacity();
if(m_pend == m_pcapacity) {
pointer temp = new data_type[ncapacity*2];
for(int i = 0; i < nsize; ++i) {
temp[i] = m_pstart[i];
}
delete [] m_pstart;
m_pstart = temp;
m_pcapacity = m_pstart+ncapacity*2;
}
m_pstart[nsize] = element;
m_pend = m_pstart+nsize+1;
}
}
void pop_back(const_reference element) {}
iterator begin() {
return m_pstart;
}
iterator end() {
return m_pend;
}
const_iterator begin()const {
return m_pstart;
}
const_iterator end()const {
return m_pend;
}
};
template <typename It,typename T>
T accumulate(It first,It last,T initVal) {
T res = initVal;
for(It it = first; it!=last; ++it) {
res+=*it;
}
return res;
}
template <typename T>
typename T::data_type sum(const T& container) {
typename T::data_type res{};
for(auto n:container) {
res+=n;
}
return res;
}
};
int main() {
mySTL::vector<int>::data_type element;
mySTL::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
cout << vec.size() << endl;
cout << vec.capacity() << endl;
mySTL::vector<int>::iterator it = vec.begin();
while(it != vec.end()){
cout << *it++ << " ";
}
cout << endl;
for(auto n:vec){
cout << n << " ";
}
cout << endl;
cout << vec[2] << endl;
cout << mySTL::accumulate(vec.begin(),vec.end(),0) << endl;
cout << mySTL::sum(vec) << endl;
}
4
4
1 2 3 4
1 2 3 4
3
10
10
注:目前仅能实现vector
的push_back()
、下标访问、循环打印、sum()
,更多功能持续开发中。