chapter 04 exercise solution
parent
b660b8f153
commit
2393586493
|
@ -0,0 +1,42 @@
|
|||
#include <cstdint>
|
||||
#include <iterator>
|
||||
#include <vector>
|
||||
|
||||
namespace mystd
|
||||
{
|
||||
|
||||
using It = std::vector<std::int32_t>::iterator;
|
||||
using DifferenceType = It::difference_type;
|
||||
|
||||
/* advence: advances iterator it by n steps */
|
||||
void advance(It &it, DifferenceType n)
|
||||
{
|
||||
it += n;
|
||||
}
|
||||
|
||||
/* distance: returns number of steps needed to go from first to last */
|
||||
DifferenceType distance(It first, It last)
|
||||
{
|
||||
auto dist = DifferenceType{0};
|
||||
|
||||
for (; first < last; ++dist)
|
||||
++first;
|
||||
for (; first > last; --dist)
|
||||
--first;
|
||||
|
||||
return dist;
|
||||
}
|
||||
|
||||
/* next: returns next iterator */
|
||||
It next(It it, DifferenceType n = 1)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
/* prev: returns previous iterator */
|
||||
It prev(It it, DifferenceType n = 1)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
} // namespace mystd
|
|
@ -0,0 +1,24 @@
|
|||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
#include "IteratorLib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
auto vector = std::vector<int>{1, 2, 3};
|
||||
auto vector_it = vector.begin();
|
||||
|
||||
auto next_it = mystd::next(vector_it);
|
||||
std::cout << "*next_it: " << *next_it << '\n';
|
||||
|
||||
auto prev_it = mystd::prev(next_it);
|
||||
std::cout << "*prev_it: " << *prev_it << '\n';
|
||||
|
||||
mystd::advance(vector_it, 2);
|
||||
std::cout << "advance: " << *vector_it << '\n';
|
||||
|
||||
auto dist = mystd::distance(vector_it, vector.begin());
|
||||
std::cout << "distance: " << dist << '\n';
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue