完成generate_n

This commit is contained in:
邹晓航
2015-03-10 10:23:03 +08:00
parent e50d759501
commit 44e55538e4
3 changed files with 18 additions and 0 deletions

View File

@@ -71,6 +71,7 @@ TinySTL
* advance100%
* sort100%
* generate100%
* generate_n100%
* distance100%
* 其他组件:
* circular_buffer100%

View File

@@ -544,6 +544,15 @@ namespace TinySTL{
*first = func();
}
}
//********** [generate_n] ******************************
//********* [Algorithm Complexity: O(N)] ****************
template <class OutputIterator, class Size, class Generator>
void generate_n(OutputIterator first, Size n, Generator gen){
while (n--){
*first = gen();
++first;
}
}
//********** [distance] ******************************
//********* [Algorithm Complexity: O(N)] ****************
template<class InputIterator>

View File

@@ -221,6 +221,14 @@ namespace TinySTL{
std::generate(std::begin(arr2), std::end(arr2), func);
}
assert(TinySTL::Test::container_equal(arr1, arr2));
int n1 = 0, n2 = 0;
auto gen1 = [&n1](){return n1++; };
auto gen2 = [&n2](){return n2++; };
int arr3[100], arr4[100];
TinySTL::generate_n(arr3, 100, gen1);
std::generate_n(arr4, 100, gen2);
assert(TinySTL::Test::container_equal(arr3, arr4));
}
void testDistance(){
TinySTL::list<int> l(10, 0);