Boost logo

Boost Users :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2006-11-10 17:19:18


Maitre Bart wrote:
> Maitre Bart <maitrebart <at> excite.com> writes:
>
> Typos corrected:
>
>
> I have this:
>
> typedef LegacySequentialContainer<string> LegacyStringVector;
>
> LegacyStringVector lsv;
>
> // ... filling lsv with strings ...
>
> I realized this:
>
> boost::counting_iterator<int> it(0);
> boost::counting_iterator<int> end(lsv.length());
> while (it < end)
> cout << boost::bind(&LegacyStringVector::operator[], lsv,
> _1)(*it++) << " ";
> cout << "\n";
>
> and it works. However, I wish to do the same but using std::copy or
> std::for_each instead.
>
> I tried the following but none is able to compile:
>
> copy(boost::counting_iterator<int>(0),
> boost::counting_iterator<int>(lsv.size()),
> boost::bind(ostream_iterator<string>(cout, " "),
> &vector<string>::operator[],
> lsv,
> _1));

std::copy doesn't take a function object as it third argument, just an
iterator. Try std::transform:

std::transform(
    boost::counting_iterator<int>(0),
    boost::counting_iterator<int>(lsv.size()),
    ostream_iterator<string>(cout, " "),
    boost::bind( &LegacyStringVector::operator[], lsv, _1)
);


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net