添加advance算法的双向迭代器版本
This commit is contained in:
@@ -446,11 +446,19 @@ namespace TinySTL{
|
|||||||
namespace {
|
namespace {
|
||||||
template<class InputIterator, class Distance>
|
template<class InputIterator, class Distance>
|
||||||
void _advance(InputIterator& it, Distance n, input_iterator_tag){
|
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){
|
if (n < 0){
|
||||||
while (n++){
|
while (n++){
|
||||||
--it;
|
--it;
|
||||||
}
|
}
|
||||||
}else{
|
}
|
||||||
|
else{
|
||||||
while (n--){
|
while (n--){
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,16 +170,20 @@ namespace TinySTL{
|
|||||||
void testAdvance(){
|
void testAdvance(){
|
||||||
TinySTL::vector<int> v;
|
TinySTL::vector<int> v;
|
||||||
TinySTL::list<int> l;
|
TinySTL::list<int> l;
|
||||||
|
TinySTL::binary_search_tree<int> bst;
|
||||||
for (auto i = 0; i != 10; ++i){
|
for (auto i = 0; i != 10; ++i){
|
||||||
v.push_back(i);
|
v.push_back(i);
|
||||||
l.push_back(i);
|
l.push_back(i);
|
||||||
|
bst.insert(i);
|
||||||
}
|
}
|
||||||
auto vit = v.begin();
|
auto vit = v.begin();
|
||||||
auto lit = l.begin();
|
auto lit = l.begin();
|
||||||
|
auto bit = bst.cbegin();
|
||||||
|
|
||||||
TinySTL::advance(vit, 5);
|
TinySTL::advance(vit, 5);
|
||||||
TinySTL::advance(lit, 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(vit, -5);
|
||||||
TinySTL::advance(lit, -5);
|
TinySTL::advance(lit, -5);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <list>
|
#include <list>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "../BinarySearchTree.h"
|
||||||
#include "../List.h"
|
#include "../List.h"
|
||||||
#include "../Vector.h"
|
#include "../Vector.h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user