Re: Testing new iterator concepts with ConceptGCC
On May 20, 7:16 pm, David Abrahams <d...@boost-consulting.com> wrote:
on Thu May 17 2007, kostas <skolarik-AT-gmail.com> wrote:
I had considered once to replace a map not just with a sorted vector
but, for some efficiency reasons, with two "parallel"
vectors(vector<key_type>, vector<data_type>). It came natural to me to
make up an iterator with value_type something like pair<key_type,
data_type> and reference type pair<key_type&, data_type&>.
c.f.http://www.boost.org/libs/iterator/doc/zip_iterator.html
zip_iterator is different from the iterator I described above. Its
reference and value_type are the same. Actually I tested it recently
and was very surprised to find that this code
--------------------------------------------------------------------------------
#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/tuple/tuple.hpp>
#include <boost/iterator/zip_iterator.hpp>
struct zip_comp
{
bool operator()(const boost::tuple<int&, int&>& t1, const
boost::tuple<int&, int&>& t2)
{
return t1.get<0>()<t2.get<0>();
}
};
int main()
{
const int items = 10;
std::vector<int> keys;
std::vector<int> data;
for(int i=0;i<items;i++) {
keys.push_back(items-i);
data.push_back(i);
}
std::sort(
boost::make_zip_iterator(
boost::make_tuple(keys.begin(), data.begin())
),
boost::make_zip_iterator(
boost::make_tuple(keys.end(), data.end())
),
zip_comp()
);
std::copy(keys.begin(), keys.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout<<std::endl;
return 0;
}
--------------------------------------------------------------------------------
compiles without any problem with my gcc 4.1.2 compiler. The result
was of course disappointing.
10 10 10 10 10 10 10 10 10 10
Have I done something wrong? I was expecting at least some warning.
But is really going to be a
valid mutable random-access iterator according to new iterator
concepts?
No, but that's an old iterator concept. It would be a valid mutable
random access _traversal_ iterator.
I was referring to the "new old iterator concepts" for which I have
found only this announcement
http://conceptgcc.wordpress.com/2007/05/03/the-new-old-iterator-concepts
I think that might be why I never wanted to require that operator->
return the pointer type.
Thanks for the hint. I didn't know that it is not required the
operator -> to return the pointer type.
Regards
Kostas
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]