全部代码
#pragma once
#include "algobase.h"
#include "construct.h"
#include "iterator.h"
#include "type_traits.h"
#include "util.h"
namespace tinySTL {
// uninitialize_copy 把[first, last)上的内容复制到以result为起始处的空间,返回复制结束的位置
template<typename InputIter, typename ForwardIter>
ForwardIter unchecked_uninit_copy(InputIter first, InputIter last, ForwardIter result,
std::true_type) {
return tinySTL::copy(first, last, result);
}
// &*的原因是函数的形参是T*,而迭代器不是指针不能直接传入,即提领取地址
template<typename InputIter, typename ForwardIter>
ForwardIter unchecked_uninit_copy(InputIter first, InputIter last, ForwardIter result,
std::false_type) {
auto cur = result;
try {
for (; first != last; ++cur, ++first) {
tinySTL::construct(&*cur, *first);
}
}
catch (...) {
for (; result != cur; ++result) {
tinySTL::destroy(&*result);
}
}