Java教程

STL源码笔记

本文主要是介绍STL源码笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 第二章
    • 2.2.3 `construct()`和`destroy()`
      • `construct()`
      • `destroy()`
        • `__destroy_aux`
  • 第三章
    • 3.4 traits
      • `iterator_traits`
      • `__type_traits`

第二章

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>

这篇关于STL源码笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!