编程语言
首页 > 编程语言> > STL源码笔记

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>

标签:__,iterator,STL,笔记,traits,源码,value,destroy,type
来源: https://blog.csdn.net/qq_35332805/article/details/120569039