mirror of
https://github.com/boostorg/iterator.git
synced 2025-07-29 12:27:33 +02:00
remove duplicate examples/move missing bits to the example directory
[SVN r26004]
This commit is contained in:
@ -16,5 +16,7 @@ test-suite iterator_examples
|
|||||||
[ run indirect_iterator_example.cpp ]
|
[ run indirect_iterator_example.cpp ]
|
||||||
[ run permutation_iter_example.cpp ]
|
[ run permutation_iter_example.cpp ]
|
||||||
[ run reverse_iterator_example.cpp ]
|
[ run reverse_iterator_example.cpp ]
|
||||||
|
[ run projection_iterator_example.cpp ]
|
||||||
[ run transform_iterator_example.cpp ]
|
[ run transform_iterator_example.cpp ]
|
||||||
|
|
||||||
;
|
;
|
||||||
|
@ -21,6 +21,13 @@ int main(int, char*[])
|
|||||||
std::copy(first, last, std::ostream_iterator<int>(std::cout, " "));
|
std::copy(first, last, std::ostream_iterator<int>(std::cout, " "));
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
// Example of using make_counting_iterator()
|
||||||
|
std::cout << "counting from -5 to 4:" << std::endl;
|
||||||
|
std::copy(boost::make_counting_iterator(-5),
|
||||||
|
boost::make_counting_iterator(5),
|
||||||
|
std::ostream_iterator<int>(std::cout, " "));
|
||||||
|
std::cout << std::endl;
|
||||||
|
|
||||||
// Example of using counting iterator to create an array of pointers.
|
// Example of using counting iterator to create an array of pointers.
|
||||||
int N = 7;
|
int N = 7;
|
||||||
std::vector<int> numbers;
|
std::vector<int> numbers;
|
||||||
|
@ -91,7 +91,7 @@ int main(int, char*[])
|
|||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
||||||
// Example of using make_const_projection_iterator()
|
// Example of using make_transform_iterator()
|
||||||
// to print out the names in the personnel list again.
|
// to print out the names in the personnel list again.
|
||||||
std::copy(
|
std::copy(
|
||||||
boost::make_transform_iterator<select_name>(personnel_list.begin())
|
boost::make_transform_iterator<select_name>(personnel_list.begin())
|
@ -50,12 +50,4 @@ test-suite iterator
|
|||||||
[ run permutation_iterator_test.cpp : : : # <stlport-iostream>on
|
[ run permutation_iterator_test.cpp : : : # <stlport-iostream>on
|
||||||
]
|
]
|
||||||
|
|
||||||
[ run iterator_adaptor_examples.cpp ]
|
|
||||||
[ run counting_iterator_example.cpp ]
|
|
||||||
[ run filter_iterator_example.cpp ]
|
|
||||||
[ run fun_out_iter_example.cpp ]
|
|
||||||
[ run indirect_iterator_example.cpp ]
|
|
||||||
[ run projection_iterator_example.cpp ]
|
|
||||||
[ run reverse_iterator_example.cpp ]
|
|
||||||
[ run transform_iterator_example.cpp ]
|
|
||||||
;
|
;
|
||||||
|
@ -44,14 +44,4 @@ test-suite iterator
|
|||||||
[ run permutation_iterator_test.cpp : : : # <stlport-iostream>on
|
[ run permutation_iterator_test.cpp : : : # <stlport-iostream>on
|
||||||
]
|
]
|
||||||
|
|
||||||
[ run ../../utility/iterator_adaptor_examples.cpp ]
|
|
||||||
[ run ../../utility/counting_iterator_example.cpp ]
|
|
||||||
[ run ../../utility/filter_iterator_example.cpp ]
|
|
||||||
[ run ../../utility/fun_out_iter_example.cpp ]
|
|
||||||
[ run ../../utility/indirect_iterator_example.cpp ]
|
|
||||||
[ run ../../utility/projection_iterator_example.cpp ]
|
|
||||||
[ run ../../utility/reverse_iterator_example.cpp ]
|
|
||||||
[ run ../../utility/transform_iterator_example.cpp ]
|
|
||||||
[ run ../../utility/iterator_traits_test.cpp ]
|
|
||||||
[ run ../../utility/shared_iterator_test.cpp ]
|
|
||||||
;
|
;
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
// (C) Copyright Jeremy Siek 2000.
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <iostream>
|
|
||||||
#include <iterator>
|
|
||||||
#include <vector>
|
|
||||||
#include <boost/iterator/counting_iterator.hpp>
|
|
||||||
#include <boost/iterator/indirect_iterator.hpp>
|
|
||||||
|
|
||||||
int main(int, char*[])
|
|
||||||
{
|
|
||||||
// Example of using counting_iterator_generator
|
|
||||||
std::cout << "counting from 0 to 4:" << std::endl;
|
|
||||||
boost::counting_iterator<int> first(0), last(4);
|
|
||||||
std::copy(first, last, std::ostream_iterator<int>(std::cout, " "));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
// Example of using make_counting_iterator()
|
|
||||||
std::cout << "counting from -5 to 4:" << std::endl;
|
|
||||||
std::copy(boost::make_counting_iterator(-5),
|
|
||||||
boost::make_counting_iterator(5),
|
|
||||||
std::ostream_iterator<int>(std::cout, " "));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
// Example of using counting iterator to create an array of pointers.
|
|
||||||
#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
|
|
||||||
const
|
|
||||||
#endif
|
|
||||||
int N = 7;
|
|
||||||
std::vector<int> numbers;
|
|
||||||
// Fill "numbers" array with [0,N)
|
|
||||||
std::copy(
|
|
||||||
boost::make_counting_iterator(0)
|
|
||||||
, boost::make_counting_iterator(N)
|
|
||||||
, std::back_inserter(numbers));
|
|
||||||
|
|
||||||
std::vector<std::vector<int>::iterator> pointers;
|
|
||||||
|
|
||||||
// Use counting iterator to fill in the array of pointers.
|
|
||||||
// causes an ICE with MSVC6
|
|
||||||
std::copy(boost::make_counting_iterator(numbers.begin()),
|
|
||||||
boost::make_counting_iterator(numbers.end()),
|
|
||||||
std::back_inserter(pointers));
|
|
||||||
|
|
||||||
// Use indirect iterator to print out numbers by accessing
|
|
||||||
// them through the array of pointers.
|
|
||||||
std::cout << "indirectly printing out the numbers from 0 to "
|
|
||||||
<< N << std::endl;
|
|
||||||
std::copy(boost::make_indirect_iterator(pointers.begin()),
|
|
||||||
boost::make_indirect_iterator(pointers.end()),
|
|
||||||
std::ostream_iterator<int>(std::cout, " "));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,61 +0,0 @@
|
|||||||
// Example of using the filter iterator adaptor from
|
|
||||||
// boost/iterator_adaptors.hpp.
|
|
||||||
|
|
||||||
// (C) Copyright Jeremy Siek 1999.
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <functional>
|
|
||||||
#include <iostream>
|
|
||||||
#include <boost/iterator/filter_iterator.hpp>
|
|
||||||
|
|
||||||
struct is_positive_number {
|
|
||||||
bool operator()(int x) { return 0 < x; }
|
|
||||||
};
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
int numbers_[] = { 0, -1, 4, -3, 5, 8, -2 };
|
|
||||||
const int N = sizeof(numbers_)/sizeof(int);
|
|
||||||
|
|
||||||
typedef int* base_iterator;
|
|
||||||
base_iterator numbers(numbers_);
|
|
||||||
|
|
||||||
// Example using make_filter_iterator()
|
|
||||||
std::copy(boost::make_filter_iterator<is_positive_number>(numbers, numbers + N),
|
|
||||||
boost::make_filter_iterator<is_positive_number>(numbers + N, numbers + N),
|
|
||||||
std::ostream_iterator<int>(std::cout, " "));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
// Example using filter_iterator
|
|
||||||
typedef boost::filter_iterator<is_positive_number, base_iterator>
|
|
||||||
FilterIter;
|
|
||||||
|
|
||||||
is_positive_number predicate;
|
|
||||||
FilterIter filter_iter_first(predicate, numbers, numbers + N);
|
|
||||||
FilterIter filter_iter_last(predicate, numbers + N, numbers + N);
|
|
||||||
|
|
||||||
std::copy(filter_iter_first, filter_iter_last, std::ostream_iterator<int>(std::cout, " "));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
// Another example using make_filter_iterator()
|
|
||||||
std::copy(
|
|
||||||
boost::make_filter_iterator(
|
|
||||||
std::bind2nd(std::greater<int>(), -2)
|
|
||||||
, numbers, numbers + N)
|
|
||||||
|
|
||||||
, boost::make_filter_iterator(
|
|
||||||
std::bind2nd(std::greater<int>(), -2)
|
|
||||||
, numbers + N, numbers + N)
|
|
||||||
|
|
||||||
, std::ostream_iterator<int>(std::cout, " ")
|
|
||||||
);
|
|
||||||
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
// (C) Copyright Jeremy Siek 2001.
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Revision History:
|
|
||||||
|
|
||||||
// 27 Feb 2001 Jeremy Siek
|
|
||||||
// Initial checkin.
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include <boost/function_output_iterator.hpp>
|
|
||||||
|
|
||||||
struct string_appender
|
|
||||||
{
|
|
||||||
string_appender(std::string& s)
|
|
||||||
: m_str(&s)
|
|
||||||
{}
|
|
||||||
|
|
||||||
void operator()(const std::string& x) const
|
|
||||||
{
|
|
||||||
*m_str += x;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string* m_str;
|
|
||||||
};
|
|
||||||
|
|
||||||
int main(int, char*[])
|
|
||||||
{
|
|
||||||
std::vector<std::string> x;
|
|
||||||
x.push_back("hello");
|
|
||||||
x.push_back(" ");
|
|
||||||
x.push_back("world");
|
|
||||||
x.push_back("!");
|
|
||||||
|
|
||||||
std::string s = "";
|
|
||||||
std::copy(x.begin(), x.end(),
|
|
||||||
boost::make_function_output_iterator(string_appender(s)));
|
|
||||||
|
|
||||||
std::cout << s << std::endl;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
// (C) Copyright Jeremy Siek 2000.
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
|
|
||||||
#include <functional>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <iostream>
|
|
||||||
#include <boost/iterator/transform_iterator.hpp>
|
|
||||||
#include <boost/pending/integer_range.hpp>
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int, char*[])
|
|
||||||
{
|
|
||||||
// This is a simple example of using the transform_iterators class to
|
|
||||||
// generate iterators that multiply the value returned by dereferencing
|
|
||||||
// the iterator. In this case we are multiplying by 2.
|
|
||||||
// Would be cooler to use lambda library in this example.
|
|
||||||
|
|
||||||
int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
|
|
||||||
|
|
||||||
typedef std::binder1st< std::multiplies<int> > Function;
|
|
||||||
|
|
||||||
typedef boost::transform_iterator<Function, int*> doubling_iterator;
|
|
||||||
|
|
||||||
doubling_iterator i(x, std::bind1st(std::multiplies<int>(), 2)),
|
|
||||||
i_end(x + sizeof(x)/sizeof(int), std::bind1st(std::multiplies<int>(), 2));
|
|
||||||
|
|
||||||
std::cout << "multiplying the array by 2:" << std::endl;
|
|
||||||
while (i != i_end)
|
|
||||||
std::cout << *i++ << " ";
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
// Here is an example of counting from 0 to 5 using the integer_range class.
|
|
||||||
|
|
||||||
boost::integer_range<int> r(0,5);
|
|
||||||
|
|
||||||
std::cout << "counting to from 0 to 4:" << std::endl;
|
|
||||||
std::copy(r.begin(), r.end(), std::ostream_iterator<int>(std::cout, " "));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
|||||||
// (C) Copyright Jeremy Siek 2000.
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
|
||||||
#include <iostream>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <boost/iterator/reverse_iterator.hpp>
|
|
||||||
#include <boost/detail/iterator.hpp>
|
|
||||||
|
|
||||||
//boost::detail::iterator_traits
|
|
||||||
int main(int, char*[])
|
|
||||||
{
|
|
||||||
char letters_[] = "hello world!";
|
|
||||||
const int N = sizeof(letters_)/sizeof(char) - 1;
|
|
||||||
typedef char* base_iterator;
|
|
||||||
base_iterator letters(letters_);
|
|
||||||
|
|
||||||
std::cout << "original sequence of letters:\t"
|
|
||||||
<< letters_ << std::endl;
|
|
||||||
|
|
||||||
std::sort(letters, letters + N);
|
|
||||||
|
|
||||||
// Use reverse_iterator_generator to print a sequence
|
|
||||||
// of letters in reverse order.
|
|
||||||
|
|
||||||
boost::reverse_iterator<base_iterator>
|
|
||||||
reverse_letters_first(letters + N),
|
|
||||||
reverse_letters_last(letters);
|
|
||||||
|
|
||||||
std::cout << "letters in descending order:\t";
|
|
||||||
std::copy(reverse_letters_first, reverse_letters_last,
|
|
||||||
std::ostream_iterator<char>(std::cout));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
// Use make_reverse_iterator() to print the sequence
|
|
||||||
// of letters in reverse-reverse order.
|
|
||||||
|
|
||||||
std::cout << "letters in ascending order:\t";
|
|
||||||
std::copy(boost::make_reverse_iterator(reverse_letters_last),
|
|
||||||
boost::make_reverse_iterator(reverse_letters_first),
|
|
||||||
std::ostream_iterator<char>(std::cout));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,76 +0,0 @@
|
|||||||
// (C) Copyright Jeremy Siek 2000.
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
|
|
||||||
#include <functional>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <iostream>
|
|
||||||
#include <boost/iterator/transform_iterator.hpp>
|
|
||||||
|
|
||||||
// What a bummer. We can't use std::binder1st with transform iterator
|
|
||||||
// because it does not have a default constructor. Here's a version
|
|
||||||
// that does.
|
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
|
|
||||||
template <class Operation>
|
|
||||||
class binder1st
|
|
||||||
: public std::unary_function<typename Operation::second_argument_type,
|
|
||||||
typename Operation::result_type> {
|
|
||||||
protected:
|
|
||||||
Operation op;
|
|
||||||
typename Operation::first_argument_type value;
|
|
||||||
public:
|
|
||||||
binder1st() { } // this had to be added!
|
|
||||||
binder1st(const Operation& x,
|
|
||||||
const typename Operation::first_argument_type& y)
|
|
||||||
: op(x), value(y) {}
|
|
||||||
typename Operation::result_type
|
|
||||||
operator()(const typename Operation::second_argument_type& x) const {
|
|
||||||
return op(value, x);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Operation, class T>
|
|
||||||
inline binder1st<Operation> bind1st(const Operation& op, const T& x) {
|
|
||||||
typedef typename Operation::first_argument_type arg1_type;
|
|
||||||
return binder1st<Operation>(op, arg1_type(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace boost
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int, char*[])
|
|
||||||
{
|
|
||||||
// This is a simple example of using the transform_iterators class to
|
|
||||||
// generate iterators that multiply the value returned by dereferencing
|
|
||||||
// the iterator. In this case we are multiplying by 2.
|
|
||||||
// Would be cooler to use lambda library in this example.
|
|
||||||
|
|
||||||
int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
|
|
||||||
const int N = sizeof(x)/sizeof(int);
|
|
||||||
|
|
||||||
typedef boost::binder1st< std::multiplies<int> > Function;
|
|
||||||
typedef boost::transform_iterator<Function, int*> doubling_iterator;
|
|
||||||
|
|
||||||
doubling_iterator i(x, boost::bind1st(std::multiplies<int>(), 2)),
|
|
||||||
i_end(x + N, boost::bind1st(std::multiplies<int>(), 2));
|
|
||||||
|
|
||||||
std::cout << "multiplying the array by 2:" << std::endl;
|
|
||||||
while (i != i_end)
|
|
||||||
std::cout << *i++ << " ";
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
std::cout << "adding 4 to each element in the array:" << std::endl;
|
|
||||||
|
|
||||||
std::copy(boost::make_transform_iterator(x, boost::bind1st(std::plus<int>(), 4)),
|
|
||||||
boost::make_transform_iterator(x + N, boost::bind1st(std::plus<int>(), 4)),
|
|
||||||
std::ostream_iterator<int>(std::cout, " "));
|
|
||||||
std::cout << std::endl;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user