添加advance算法的双向迭代器版本

This commit is contained in:
邹晓航
2015-01-27 13:20:41 +08:00
parent 7fef271c27
commit 1ec336e76d
3 changed files with 15 additions and 2 deletions

View File

@@ -446,11 +446,19 @@ namespace TinySTL{
namespace {
template<class InputIterator, class Distance>
void _advance(InputIterator& it, Distance n, input_iterator_tag){
assert(n >= 0);
while (n--){
++it;
}
}
template<class BidirectionIterator, class Distance>
void _advance(BidirectionIterator& it, Distance n, bidirectional_iterator_tag){
if (n < 0){
while (n++){
--it;
}
}else{
}
else{
while (n--){
++it;
}

View File

@@ -170,16 +170,20 @@ namespace TinySTL{
void testAdvance(){
TinySTL::vector<int> v;
TinySTL::list<int> l;
TinySTL::binary_search_tree<int> bst;
for (auto i = 0; i != 10; ++i){
v.push_back(i);
l.push_back(i);
bst.insert(i);
}
auto vit = v.begin();
auto lit = l.begin();
auto bit = bst.cbegin();
TinySTL::advance(vit, 5);
TinySTL::advance(lit, 5);
assert(*vit == 5 && *lit == 5);
TinySTL::advance(bit, 5);
assert(*vit == 5 && *lit == 5 && *bit == 5);
TinySTL::advance(vit, -5);
TinySTL::advance(lit, -5);

View File

@@ -13,6 +13,7 @@
#include <list>
#include <vector>
#include "../BinarySearchTree.h"
#include "../List.h"
#include "../Vector.h"