STL源码笔记

目录

第二章

2.2.3 construct()destroy()

construct()

使用了placement new

template<class T1,class T2>
inline void construct(T1* p,const T2& value) {
	new (p) T1(value);
}

destroy()

template<class ForwardIterator>
inline void destroy(ForwardIterator first,ForwardIterator last) {
	__destroy(first,last,value_type(first));
};

利用了第三章中提到的__type_traits<>获取合适的措施。
对于POD类型,则默认不采取任何措施。

__destroy_aux

template<class ForwardIterator>
inline void __destroy_aux(ForwardIterator,
						  ForwardIterator,__true_type) {};

出于性能?直接特化了char *wchar_t*版本。省去找模板?

inline void destory(char*,char*) {};
inline void destory(wchar_t*,wchar_t*) {};

第三章

3.4 traits

iterator_traits<T>

为了获取iterator所指内容的型别,有了iterator_traits
my_define.h

#ifndef CH1_MY_DEFINE_H
#define CH1_MY_DEFINE_H
template<class T>
struct my_iterator_traits{
    typedef typename T::value_type value_type;

};

template<class T>
struct my_iterator_traits<T*>{
    typedef  T value_type;

};


#endif //CH1_MY_DEFINE_H

main.cpp

#include <iostream>
#include <vector>

#include "my_define.h"


using namespace std;

template<class I>
typename my_iterator_traits<I>::value_type 
function(I a) {
    return *a;
}

int main() {
    int *aa = new int;
    *aa = 1;
    cout<< function(aa)<<endl;
    int a = 1;
    vector<int> arr(1,0);
    auto iter=arr.begin();
    cout<< function(iter)<<endl;
    return 0;
}

__type_traits<T>

上一篇:File "/bin/yum", line 30 except KeyboardInterrupt, e: SyntaxError: invalid syntax 报错的解决


下一篇:Python 异常处理